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

import abc
import admin_pb2
import api_pb2
import collections.abc
import google.protobuf.empty_pb2
import grpc
import grpc.aio
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class AdminStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    GetUserDetails: grpc.UnaryUnaryMultiCallable[admin_pb2.GetUserDetailsReq, admin_pb2.UserDetails]
    GetUser: grpc.UnaryUnaryMultiCallable[admin_pb2.GetUserReq, api_pb2.User]
    """Get info about a particular user, ignores the fact that they may be banned/deleted"""
    SearchUsers: grpc.UnaryUnaryMultiCallable[admin_pb2.SearchUsersReq, admin_pb2.SearchUsersRes]
    ChangeUserGender: grpc.UnaryUnaryMultiCallable[admin_pb2.ChangeUserGenderReq, admin_pb2.UserDetails]
    ChangeUserBirthdate: grpc.UnaryUnaryMultiCallable[admin_pb2.ChangeUserBirthdateReq, admin_pb2.UserDetails]
    AddBadge: grpc.UnaryUnaryMultiCallable[admin_pb2.AddBadgeReq, admin_pb2.UserDetails]
    RemoveBadge: grpc.UnaryUnaryMultiCallable[admin_pb2.RemoveBadgeReq, admin_pb2.UserDetails]
    SetPassportSexGenderException: grpc.UnaryUnaryMultiCallable[admin_pb2.SetPassportSexGenderExceptionReq, admin_pb2.UserDetails]
    BanUser: grpc.UnaryUnaryMultiCallable[admin_pb2.BanUserReq, admin_pb2.UserDetails]
    UnbanUser: grpc.UnaryUnaryMultiCallable[admin_pb2.UnbanUserReq, admin_pb2.UserDetails]
    ShadowUser: grpc.UnaryUnaryMultiCallable[admin_pb2.ShadowUserReq, admin_pb2.UserDetails]
    UnshadowUser: grpc.UnaryUnaryMultiCallable[admin_pb2.UnshadowUserReq, admin_pb2.UserDetails]
    AddAdminNote: grpc.UnaryUnaryMultiCallable[admin_pb2.AddAdminNoteReq, admin_pb2.UserDetails]
    GetContentReport: grpc.UnaryUnaryMultiCallable[admin_pb2.GetContentReportReq, admin_pb2.GetContentReportRes]
    GetContentReportsForAuthor: grpc.UnaryUnaryMultiCallable[admin_pb2.GetContentReportsForAuthorReq, admin_pb2.GetContentReportsForAuthorRes]
    SendModNote: grpc.UnaryUnaryMultiCallable[admin_pb2.SendModNoteReq, admin_pb2.UserDetails]
    MarkUserNeedsLocationUpdate: grpc.UnaryUnaryMultiCallable[admin_pb2.MarkUserNeedsLocationUpdateReq, admin_pb2.UserDetails]
    DeleteUser: grpc.UnaryUnaryMultiCallable[admin_pb2.DeleteUserReq, admin_pb2.UserDetails]
    RecoverDeletedUser: grpc.UnaryUnaryMultiCallable[admin_pb2.RecoverDeletedUserReq, admin_pb2.UserDetails]
    CreateApiKey: grpc.UnaryUnaryMultiCallable[admin_pb2.CreateApiKeyReq, admin_pb2.CreateApiKeyRes]
    """Create an API key for a user. For security, we don't return the API key to the admin calling this API, rather
    it's sent to the user in an email
    """
    GetChats: grpc.UnaryUnaryMultiCallable[admin_pb2.GetChatsReq, admin_pb2.GetChatsRes]
    DeleteEvent: grpc.UnaryUnaryMultiCallable[admin_pb2.DeleteEventReq, google.protobuf.empty_pb2.Empty]
    ListUserIds: grpc.UnaryUnaryMultiCallable[admin_pb2.ListUserIdsReq, admin_pb2.ListUserIdsRes]
    EditReferenceText: grpc.UnaryUnaryMultiCallable[admin_pb2.EditReferenceTextReq, google.protobuf.empty_pb2.Empty]
    DeleteReference: grpc.UnaryUnaryMultiCallable[admin_pb2.DeleteReferenceReq, google.protobuf.empty_pb2.Empty]
    GetUserReferences: grpc.UnaryUnaryMultiCallable[admin_pb2.GetUserReferencesReq, admin_pb2.GetUserReferencesRes]
    GetFriendRequests: grpc.UnaryUnaryMultiCallable[admin_pb2.GetFriendRequestsReq, admin_pb2.GetFriendRequestsRes]
    GetNonvisibleUserAccessLog: grpc.UnaryUnaryMultiCallable[admin_pb2.GetNonvisibleUserAccessLogReq, admin_pb2.GetNonvisibleUserAccessLogRes]
    EditDiscussion: grpc.UnaryUnaryMultiCallable[admin_pb2.EditDiscussionReq, google.protobuf.empty_pb2.Empty]
    DeleteDiscussion: grpc.UnaryUnaryMultiCallable[admin_pb2.AdminDeleteDiscussionReq, google.protobuf.empty_pb2.Empty]
    EditReply: grpc.UnaryUnaryMultiCallable[admin_pb2.EditReplyReq, google.protobuf.empty_pb2.Empty]
    AddUsersToModerationUserList: grpc.UnaryUnaryMultiCallable[admin_pb2.AddUsersToModerationUserListReq, admin_pb2.AddUsersToModerationUserListRes]
    RemoveUserFromModerationUserList: grpc.UnaryUnaryMultiCallable[admin_pb2.RemoveUserFromModerationUserListReq, google.protobuf.empty_pb2.Empty]
    ListModerationUserLists: grpc.UnaryUnaryMultiCallable[admin_pb2.ListModerationUserListsReq, admin_pb2.ListModerationUserListsRes]
    CreateAccountDeletionLink: grpc.UnaryUnaryMultiCallable[admin_pb2.CreateAccountDeletionLinkReq, admin_pb2.CreateAccountDeletionLinkRes]
    AccessStats: grpc.UnaryUnaryMultiCallable[admin_pb2.AccessStatsReq, admin_pb2.AccessStatsRes]
    SetLastDonated: grpc.UnaryUnaryMultiCallable[admin_pb2.SetLastDonatedReq, admin_pb2.UserDetails]
    CreateAdminTag: grpc.UnaryUnaryMultiCallable[admin_pb2.CreateAdminTagReq, admin_pb2.AdminTagInfo]
    ListAdminTags: grpc.UnaryUnaryMultiCallable[admin_pb2.ListAdminTagsReq, admin_pb2.ListAdminTagsRes]
    AddAdminTagToUser: grpc.UnaryUnaryMultiCallable[admin_pb2.AddAdminTagToUserReq, admin_pb2.UserDetails]
    RemoveAdminTagFromUser: grpc.UnaryUnaryMultiCallable[admin_pb2.RemoveAdminTagFromUserReq, admin_pb2.UserDetails]
    SetModScore: grpc.UnaryUnaryMultiCallable[admin_pb2.SetModScoreReq, admin_pb2.UserDetails]
    ListAdminActions: grpc.UnaryUnaryMultiCallable[admin_pb2.ListAdminActionsReq, admin_pb2.ListAdminActionsRes]
    ListUserUploads: grpc.UnaryUnaryMultiCallable[admin_pb2.ListUserUploadsReq, admin_pb2.ListUserUploadsRes]
    CreateOTAPackage: grpc.UnaryUnaryMultiCallable[admin_pb2.CreateOTAPackageReq, admin_pb2.OTAPackage]
    """Register a published Expo OTA bundle so the backend serves it to compatible native builds"""
    ListOTAPackages: grpc.UnaryUnaryMultiCallable[admin_pb2.ListOTAPackagesReq, admin_pb2.ListOTAPackagesRes]
    BanOTAPackage: grpc.UnaryUnaryMultiCallable[admin_pb2.BanOTAPackageReq, admin_pb2.OTAPackage]
    """Ban a package so it's no longer served; a matching client falls back to the next-newest
    non-banned package (i.e. a rollback), or to no update if none remain. Irreversible — to undo
    an accidental ban, republish the bundle as a new package (rolling forward).
    """

class AdminServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def GetUserDetails(
        self,
        request: admin_pb2.GetUserDetailsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def GetUser(
        self,
        request: admin_pb2.GetUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> api_pb2.User:
        """Get info about a particular user, ignores the fact that they may be banned/deleted"""

    @abc.abstractmethod
    def SearchUsers(
        self,
        request: admin_pb2.SearchUsersReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.SearchUsersRes: ...

    @abc.abstractmethod
    def ChangeUserGender(
        self,
        request: admin_pb2.ChangeUserGenderReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def ChangeUserBirthdate(
        self,
        request: admin_pb2.ChangeUserBirthdateReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def AddBadge(
        self,
        request: admin_pb2.AddBadgeReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def RemoveBadge(
        self,
        request: admin_pb2.RemoveBadgeReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def SetPassportSexGenderException(
        self,
        request: admin_pb2.SetPassportSexGenderExceptionReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def BanUser(
        self,
        request: admin_pb2.BanUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def UnbanUser(
        self,
        request: admin_pb2.UnbanUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def ShadowUser(
        self,
        request: admin_pb2.ShadowUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def UnshadowUser(
        self,
        request: admin_pb2.UnshadowUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def AddAdminNote(
        self,
        request: admin_pb2.AddAdminNoteReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def GetContentReport(
        self,
        request: admin_pb2.GetContentReportReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.GetContentReportRes: ...

    @abc.abstractmethod
    def GetContentReportsForAuthor(
        self,
        request: admin_pb2.GetContentReportsForAuthorReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.GetContentReportsForAuthorRes: ...

    @abc.abstractmethod
    def SendModNote(
        self,
        request: admin_pb2.SendModNoteReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def MarkUserNeedsLocationUpdate(
        self,
        request: admin_pb2.MarkUserNeedsLocationUpdateReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def DeleteUser(
        self,
        request: admin_pb2.DeleteUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def RecoverDeletedUser(
        self,
        request: admin_pb2.RecoverDeletedUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def CreateApiKey(
        self,
        request: admin_pb2.CreateApiKeyReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.CreateApiKeyRes:
        """Create an API key for a user. For security, we don't return the API key to the admin calling this API, rather
        it's sent to the user in an email
        """

    @abc.abstractmethod
    def GetChats(
        self,
        request: admin_pb2.GetChatsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.GetChatsRes: ...

    @abc.abstractmethod
    def DeleteEvent(
        self,
        request: admin_pb2.DeleteEventReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def ListUserIds(
        self,
        request: admin_pb2.ListUserIdsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.ListUserIdsRes: ...

    @abc.abstractmethod
    def EditReferenceText(
        self,
        request: admin_pb2.EditReferenceTextReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def DeleteReference(
        self,
        request: admin_pb2.DeleteReferenceReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def GetUserReferences(
        self,
        request: admin_pb2.GetUserReferencesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.GetUserReferencesRes: ...

    @abc.abstractmethod
    def GetFriendRequests(
        self,
        request: admin_pb2.GetFriendRequestsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.GetFriendRequestsRes: ...

    @abc.abstractmethod
    def GetNonvisibleUserAccessLog(
        self,
        request: admin_pb2.GetNonvisibleUserAccessLogReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.GetNonvisibleUserAccessLogRes: ...

    @abc.abstractmethod
    def EditDiscussion(
        self,
        request: admin_pb2.EditDiscussionReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def DeleteDiscussion(
        self,
        request: admin_pb2.AdminDeleteDiscussionReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def EditReply(
        self,
        request: admin_pb2.EditReplyReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def AddUsersToModerationUserList(
        self,
        request: admin_pb2.AddUsersToModerationUserListReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.AddUsersToModerationUserListRes: ...

    @abc.abstractmethod
    def RemoveUserFromModerationUserList(
        self,
        request: admin_pb2.RemoveUserFromModerationUserListReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def ListModerationUserLists(
        self,
        request: admin_pb2.ListModerationUserListsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.ListModerationUserListsRes: ...

    @abc.abstractmethod
    def CreateAccountDeletionLink(
        self,
        request: admin_pb2.CreateAccountDeletionLinkReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.CreateAccountDeletionLinkRes: ...

    @abc.abstractmethod
    def AccessStats(
        self,
        request: admin_pb2.AccessStatsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.AccessStatsRes: ...

    @abc.abstractmethod
    def SetLastDonated(
        self,
        request: admin_pb2.SetLastDonatedReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def CreateAdminTag(
        self,
        request: admin_pb2.CreateAdminTagReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.AdminTagInfo: ...

    @abc.abstractmethod
    def ListAdminTags(
        self,
        request: admin_pb2.ListAdminTagsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.ListAdminTagsRes: ...

    @abc.abstractmethod
    def AddAdminTagToUser(
        self,
        request: admin_pb2.AddAdminTagToUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def RemoveAdminTagFromUser(
        self,
        request: admin_pb2.RemoveAdminTagFromUserReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def SetModScore(
        self,
        request: admin_pb2.SetModScoreReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.UserDetails: ...

    @abc.abstractmethod
    def ListAdminActions(
        self,
        request: admin_pb2.ListAdminActionsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.ListAdminActionsRes: ...

    @abc.abstractmethod
    def ListUserUploads(
        self,
        request: admin_pb2.ListUserUploadsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.ListUserUploadsRes: ...

    @abc.abstractmethod
    def CreateOTAPackage(
        self,
        request: admin_pb2.CreateOTAPackageReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.OTAPackage:
        """Register a published Expo OTA bundle so the backend serves it to compatible native builds"""

    @abc.abstractmethod
    def ListOTAPackages(
        self,
        request: admin_pb2.ListOTAPackagesReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.ListOTAPackagesRes: ...

    @abc.abstractmethod
    def BanOTAPackage(
        self,
        request: admin_pb2.BanOTAPackageReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> admin_pb2.OTAPackage:
        """Ban a package so it's no longer served; a matching client falls back to the next-newest
        non-banned package (i.e. a rollback), or to no update if none remain. Irreversible — to undo
        an accidental ban, republish the bundle as a new package (rolling forward).
        """

def add_AdminServicer_to_server(servicer: AdminServicer, server: grpc.Server) -> None: ...
