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 google.protobuf.empty_pb2
import grpc
import grpc.aio
import requests_pb2
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class RequestsStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    CreateHostRequest: grpc.UnaryUnaryMultiCallable[requests_pb2.CreateHostRequestReq, requests_pb2.CreateHostRequestRes]
    GetHostRequest: grpc.UnaryUnaryMultiCallable[requests_pb2.GetHostRequestReq, requests_pb2.HostRequest]
    RespondHostRequest: grpc.UnaryUnaryMultiCallable[requests_pb2.RespondHostRequestReq, google.protobuf.empty_pb2.Empty]
    """Change the status of a host request.
    Throws NOT_FOUND if you don't have a host request of that id, NOT_AUTHORIZED
    if you try to change the status to one you aren't allowed.
    """
    SetHostRequestArchiveStatus: grpc.UnaryUnaryMultiCallable[requests_pb2.SetHostRequestArchiveStatusReq, requests_pb2.SetHostRequestArchiveStatusRes]
    """Archive a host request. This will remove it from the list of requests"""
    ListHostRequests: grpc.UnaryUnaryMultiCallable[requests_pb2.ListHostRequestsReq, requests_pb2.ListHostRequestsRes]
    GetHostRequestMessages: grpc.UnaryUnaryMultiCallable[requests_pb2.GetHostRequestMessagesReq, requests_pb2.GetHostRequestMessagesRes]
    """Get the messages and events (created, accepted, etc) for a host request
    Throws NOT_FOUND if the user isn't part of the request or it doesn't exist
    """
    SendHostRequestMessage: grpc.UnaryUnaryMultiCallable[requests_pb2.SendHostRequestMessageReq, google.protobuf.empty_pb2.Empty]
    """Adds a new message to a host request
    Throws NOT_FOUND if the user isn't part of the request or it doesn't exist
    Throws PERMISSION_DENIED if you try to send a message to a rejected, confirmed
    or cancelled request
    """
    GetHostRequestUpdates: grpc.UnaryUnaryMultiCallable[requests_pb2.GetHostRequestUpdatesReq, requests_pb2.GetHostRequestUpdatesRes]
    """Get new messages in a host request and latest status"""
    MarkLastSeenHostRequest: grpc.UnaryUnaryMultiCallable[requests_pb2.MarkLastSeenHostRequestReq, google.protobuf.empty_pb2.Empty]
    """Saves the last seen message"""
    GetResponseRate: grpc.UnaryUnaryMultiCallable[requests_pb2.GetResponseRateReq, requests_pb2.GetResponseRateRes]
    """Get the response rate and response time for a given user"""
    SendHostRequestFeedback: grpc.UnaryUnaryMultiCallable[requests_pb2.SendHostRequestFeedbackReq, google.protobuf.empty_pb2.Empty]
    """Send private feedback on host reqeust"""

class RequestsServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def CreateHostRequest(
        self,
        request: requests_pb2.CreateHostRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.CreateHostRequestRes: ...

    @abc.abstractmethod
    def GetHostRequest(
        self,
        request: requests_pb2.GetHostRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.HostRequest: ...

    @abc.abstractmethod
    def RespondHostRequest(
        self,
        request: requests_pb2.RespondHostRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Change the status of a host request.
        Throws NOT_FOUND if you don't have a host request of that id, NOT_AUTHORIZED
        if you try to change the status to one you aren't allowed.
        """

    @abc.abstractmethod
    def SetHostRequestArchiveStatus(
        self,
        request: requests_pb2.SetHostRequestArchiveStatusReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.SetHostRequestArchiveStatusRes:
        """Archive a host request. This will remove it from the list of requests"""

    @abc.abstractmethod
    def ListHostRequests(
        self,
        request: requests_pb2.ListHostRequestsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.ListHostRequestsRes: ...

    @abc.abstractmethod
    def GetHostRequestMessages(
        self,
        request: requests_pb2.GetHostRequestMessagesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.GetHostRequestMessagesRes:
        """Get the messages and events (created, accepted, etc) for a host request
        Throws NOT_FOUND if the user isn't part of the request or it doesn't exist
        """

    @abc.abstractmethod
    def SendHostRequestMessage(
        self,
        request: requests_pb2.SendHostRequestMessageReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Adds a new message to a host request
        Throws NOT_FOUND if the user isn't part of the request or it doesn't exist
        Throws PERMISSION_DENIED if you try to send a message to a rejected, confirmed
        or cancelled request
        """

    @abc.abstractmethod
    def GetHostRequestUpdates(
        self,
        request: requests_pb2.GetHostRequestUpdatesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.GetHostRequestUpdatesRes:
        """Get new messages in a host request and latest status"""

    @abc.abstractmethod
    def MarkLastSeenHostRequest(
        self,
        request: requests_pb2.MarkLastSeenHostRequestReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Saves the last seen message"""

    @abc.abstractmethod
    def GetResponseRate(
        self,
        request: requests_pb2.GetResponseRateReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> requests_pb2.GetResponseRateRes:
        """Get the response rate and response time for a given user"""

    @abc.abstractmethod
    def SendHostRequestFeedback(
        self,
        request: requests_pb2.SendHostRequestFeedbackReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Send private feedback on host reqeust"""

def add_RequestsServicer_to_server(servicer: RequestsServicer, server: grpc.Server) -> None: ...
