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 jail_pb2
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class JailStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    JailInfo: grpc.UnaryUnaryMultiCallable[google.protobuf.empty_pb2.Empty, jail_pb2.JailInfoRes]
    """
    Jail API

    If the user hasn't completed necessary steps needed to use the app, they are
    only allowed to hit the Jail API.

    E.g. if signing up is incomplete, or they haven't agreed to TOS, etc.

    These API functions are available only to signed-in users, but while other
    APIs can't be used while Jailed, these can.
    Get reason why the user is in jail, e.g. hasn't completed all sign-up
    steps, or needs to read something, etc
    """
    AcceptTOS: grpc.UnaryUnaryMultiCallable[jail_pb2.AcceptTOSReq, jail_pb2.JailInfoRes]
    """Accept TOS"""
    SetLocation: grpc.UnaryUnaryMultiCallable[jail_pb2.SetLocationReq, jail_pb2.JailInfoRes]
    """Set the user's location
    If you're not jailed, do this with api.UpdateProfile!
    """
    AcceptCommunityGuidelines: grpc.UnaryUnaryMultiCallable[jail_pb2.AcceptCommunityGuidelinesReq, jail_pb2.JailInfoRes]
    """Accept community guidelines"""
    AcknowledgePendingModNote: grpc.UnaryUnaryMultiCallable[jail_pb2.AcknowledgePendingModNoteReq, jail_pb2.JailInfoRes]
    """Acknowledges a mod note"""
    RespondToActivenessProbe: grpc.UnaryUnaryMultiCallable[jail_pb2.RespondToActivenessProbeReq, jail_pb2.JailInfoRes]
    """Either dismiss an activeness probe or say you aren't hosting"""

class JailServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def JailInfo(
        self,
        request: google.protobuf.empty_pb2.Empty,
        context: CouchersContext,
        session: orm.Session,
    ) -> jail_pb2.JailInfoRes:
        """
        Jail API

        If the user hasn't completed necessary steps needed to use the app, they are
        only allowed to hit the Jail API.

        E.g. if signing up is incomplete, or they haven't agreed to TOS, etc.

        These API functions are available only to signed-in users, but while other
        APIs can't be used while Jailed, these can.
        Get reason why the user is in jail, e.g. hasn't completed all sign-up
        steps, or needs to read something, etc
        """

    @abc.abstractmethod
    def AcceptTOS(
        self,
        request: jail_pb2.AcceptTOSReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> jail_pb2.JailInfoRes:
        """Accept TOS"""

    @abc.abstractmethod
    def SetLocation(
        self,
        request: jail_pb2.SetLocationReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> jail_pb2.JailInfoRes:
        """Set the user's location
        If you're not jailed, do this with api.UpdateProfile!
        """

    @abc.abstractmethod
    def AcceptCommunityGuidelines(
        self,
        request: jail_pb2.AcceptCommunityGuidelinesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> jail_pb2.JailInfoRes:
        """Accept community guidelines"""

    @abc.abstractmethod
    def AcknowledgePendingModNote(
        self,
        request: jail_pb2.AcknowledgePendingModNoteReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> jail_pb2.JailInfoRes:
        """Acknowledges a mod note"""

    @abc.abstractmethod
    def RespondToActivenessProbe(
        self,
        request: jail_pb2.RespondToActivenessProbeReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> jail_pb2.JailInfoRes:
        """Either dismiss an activeness probe or say you aren't hosting"""

def add_JailServicer_to_server(servicer: JailServicer, server: grpc.Server) -> None: ...
