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 grpc
import grpc.aio
import public_trips_pb2
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class PublicTripsStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    CreatePublicTrip: grpc.UnaryUnaryMultiCallable[public_trips_pb2.CreatePublicTripReq, public_trips_pb2.PublicTrip]
    """Create a new public trip in a community"""
    GetPublicTrip: grpc.UnaryUnaryMultiCallable[public_trips_pb2.GetPublicTripReq, public_trips_pb2.PublicTrip]
    """Get details of a public trip"""
    ListPublicTrips: grpc.UnaryUnaryMultiCallable[public_trips_pb2.ListPublicTripsReq, public_trips_pb2.ListPublicTripsRes]
    """List public trips in a community (for hosts browsing)"""
    ListPublicTripsByUser: grpc.UnaryUnaryMultiCallable[public_trips_pb2.ListPublicTripsByUserReq, public_trips_pb2.ListPublicTripsByUserRes]
    """List a user's public trips. Used for both the user's own dashboard and
    for showing upcoming trips on another user's profile.
    - If user_id matches the caller, all trips (including closed/past) are returned.
    - Otherwise only active, upcoming trips are returned.
    """
    UpdatePublicTrip: grpc.UnaryUnaryMultiCallable[public_trips_pb2.UpdatePublicTripReq, public_trips_pb2.PublicTrip]
    """Edit a public trip. Owner-only. Content edits (dates, description)
    require the trip's end date to be today or later. Status can be set to
    CLOSED at any time, or back to SEARCHING_FOR_HOST as long as the trip is
    not in the past.
    """

class PublicTripsServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def CreatePublicTrip(
        self,
        request: public_trips_pb2.CreatePublicTripReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> public_trips_pb2.PublicTrip:
        """Create a new public trip in a community"""

    @abc.abstractmethod
    def GetPublicTrip(
        self,
        request: public_trips_pb2.GetPublicTripReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> public_trips_pb2.PublicTrip:
        """Get details of a public trip"""

    @abc.abstractmethod
    def ListPublicTrips(
        self,
        request: public_trips_pb2.ListPublicTripsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> public_trips_pb2.ListPublicTripsRes:
        """List public trips in a community (for hosts browsing)"""

    @abc.abstractmethod
    def ListPublicTripsByUser(
        self,
        request: public_trips_pb2.ListPublicTripsByUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> public_trips_pb2.ListPublicTripsByUserRes:
        """List a user's public trips. Used for both the user's own dashboard and
        for showing upcoming trips on another user's profile.
        - If user_id matches the caller, all trips (including closed/past) are returned.
        - Otherwise only active, upcoming trips are returned.
        """

    @abc.abstractmethod
    def UpdatePublicTrip(
        self,
        request: public_trips_pb2.UpdatePublicTripReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> public_trips_pb2.PublicTrip:
        """Edit a public trip. Owner-only. Content edits (dates, description)
        require the trip's end date to be today or later. Status can be set to
        CLOSED at any time, or back to SEARCHING_FOR_HOST as long as the trip is
        not in the past.
        """

def add_PublicTripsServicer_to_server(servicer: PublicTripsServicer, server: grpc.Server) -> None: ...
