from sqlalchemy import orm
from couchers.context import CouchersContext
"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

import abc
import collections.abc
import events_pb2
import google.protobuf.empty_pb2
import grpc
import grpc.aio
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class EventsStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    CreateEvent: grpc.UnaryUnaryMultiCallable[events_pb2.CreateEventReq, events_pb2.Event]
    """Creates an event, only one instance, add more with ScheduleEvent"""
    ScheduleEvent: grpc.UnaryUnaryMultiCallable[events_pb2.ScheduleEventReq, events_pb2.Event]
    """Schedules a new occurrence of an existing event"""
    UpdateEvent: grpc.UnaryUnaryMultiCallable[events_pb2.UpdateEventReq, events_pb2.Event]
    """Edit an event"""
    GetEvent: grpc.UnaryUnaryMultiCallable[events_pb2.GetEventReq, events_pb2.Event]
    """Gets an event"""
    CancelEvent: grpc.UnaryUnaryMultiCallable[events_pb2.CancelEventReq, google.protobuf.empty_pb2.Empty]
    """Cancels an event"""
    RequestCommunityInvite: grpc.UnaryUnaryMultiCallable[events_pb2.RequestCommunityInviteReq, google.protobuf.empty_pb2.Empty]
    """Requests that a notification/email invitation about the event is sent out to the community"""
    ListEventOccurrences: grpc.UnaryUnaryMultiCallable[events_pb2.ListEventOccurrencesReq, events_pb2.ListEventOccurrencesRes]
    """List all occurrences of a recurring event"""
    ListEventAttendees: grpc.UnaryUnaryMultiCallable[events_pb2.ListEventAttendeesReq, events_pb2.ListEventAttendeesRes]
    """Paginated list of event attendees"""
    ListEventSubscribers: grpc.UnaryUnaryMultiCallable[events_pb2.ListEventSubscribersReq, events_pb2.ListEventSubscribersRes]
    """Paginated list of event subscribers"""
    ListEventOrganizers: grpc.UnaryUnaryMultiCallable[events_pb2.ListEventOrganizersReq, events_pb2.ListEventOrganizersRes]
    """Paginated list of event organizers"""
    TransferEvent: grpc.UnaryUnaryMultiCallable[events_pb2.TransferEventReq, events_pb2.Event]
    """Transfer an event you own to either a group or a community"""
    SetEventSubscription: grpc.UnaryUnaryMultiCallable[events_pb2.SetEventSubscriptionReq, events_pb2.Event]
    """Subscribe to get notifications about all occurrences of an event"""
    SetEventAttendance: grpc.UnaryUnaryMultiCallable[events_pb2.SetEventAttendanceReq, events_pb2.Event]
    """RSVP/change going status for an occurrence of an event"""
    InviteEventOrganizer: grpc.UnaryUnaryMultiCallable[events_pb2.InviteEventOrganizerReq, google.protobuf.empty_pb2.Empty]
    """Invite another user to become an organizer of this event"""
    RemoveEventOrganizer: grpc.UnaryUnaryMultiCallable[events_pb2.RemoveEventOrganizerReq, google.protobuf.empty_pb2.Empty]
    """Remove yourself as an event organizer"""
    ListMyEvents: grpc.UnaryUnaryMultiCallable[events_pb2.ListMyEventsReq, events_pb2.ListMyEventsRes]
    """Lists all subscribed, attending"""
    ListAllEvents: grpc.UnaryUnaryMultiCallable[events_pb2.ListAllEventsReq, events_pb2.ListAllEventsRes]
    """Lists all events"""

class EventsServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def CreateEvent(
        self,
        request: events_pb2.CreateEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """Creates an event, only one instance, add more with ScheduleEvent"""

    @abc.abstractmethod
    def ScheduleEvent(
        self,
        request: events_pb2.ScheduleEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """Schedules a new occurrence of an existing event"""

    @abc.abstractmethod
    def UpdateEvent(
        self,
        request: events_pb2.UpdateEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """Edit an event"""

    @abc.abstractmethod
    def GetEvent(
        self,
        request: events_pb2.GetEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """Gets an event"""

    @abc.abstractmethod
    def CancelEvent(
        self,
        request: events_pb2.CancelEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Cancels an event"""

    @abc.abstractmethod
    def RequestCommunityInvite(
        self,
        request: events_pb2.RequestCommunityInviteReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Requests that a notification/email invitation about the event is sent out to the community"""

    @abc.abstractmethod
    def ListEventOccurrences(
        self,
        request: events_pb2.ListEventOccurrencesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.ListEventOccurrencesRes:
        """List all occurrences of a recurring event"""

    @abc.abstractmethod
    def ListEventAttendees(
        self,
        request: events_pb2.ListEventAttendeesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.ListEventAttendeesRes:
        """Paginated list of event attendees"""

    @abc.abstractmethod
    def ListEventSubscribers(
        self,
        request: events_pb2.ListEventSubscribersReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.ListEventSubscribersRes:
        """Paginated list of event subscribers"""

    @abc.abstractmethod
    def ListEventOrganizers(
        self,
        request: events_pb2.ListEventOrganizersReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.ListEventOrganizersRes:
        """Paginated list of event organizers"""

    @abc.abstractmethod
    def TransferEvent(
        self,
        request: events_pb2.TransferEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """Transfer an event you own to either a group or a community"""

    @abc.abstractmethod
    def SetEventSubscription(
        self,
        request: events_pb2.SetEventSubscriptionReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """Subscribe to get notifications about all occurrences of an event"""

    @abc.abstractmethod
    def SetEventAttendance(
        self,
        request: events_pb2.SetEventAttendanceReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.Event:
        """RSVP/change going status for an occurrence of an event"""

    @abc.abstractmethod
    def InviteEventOrganizer(
        self,
        request: events_pb2.InviteEventOrganizerReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Invite another user to become an organizer of this event"""

    @abc.abstractmethod
    def RemoveEventOrganizer(
        self,
        request: events_pb2.RemoveEventOrganizerReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Remove yourself as an event organizer"""

    @abc.abstractmethod
    def ListMyEvents(
        self,
        request: events_pb2.ListMyEventsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.ListMyEventsRes:
        """Lists all subscribed, attending"""

    @abc.abstractmethod
    def ListAllEvents(
        self,
        request: events_pb2.ListAllEventsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> events_pb2.ListAllEventsRes:
        """Lists all events"""

def add_EventsServicer_to_server(servicer: EventsServicer, server: grpc.Server) -> None: ...
