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

import abc
import bugs_pb2
import collections.abc
import google.api.httpbody_pb2
import google.protobuf.empty_pb2
import grpc
import grpc.aio
import typing


GRPC_GENERATED_VERSION: str
GRPC_VERSION: str

class BugsStub:
    def __init__(self, channel: grpc.Channel) -> None: ...
    Version: grpc.UnaryUnaryMultiCallable[google.protobuf.empty_pb2.Empty, bugs_pb2.VersionInfo]
    ReportBug: grpc.UnaryUnaryMultiCallable[bugs_pb2.ReportBugReq, bugs_pb2.ReportBugRes]
    """Report a bug"""
    Status: grpc.UnaryUnaryMultiCallable[bugs_pb2.StatusReq, bugs_pb2.StatusRes]
    GetDescriptors: grpc.UnaryUnaryMultiCallable[google.protobuf.empty_pb2.Empty, google.api.httpbody_pb2.HttpBody]
    GetNativeUpdateManifest: grpc.UnaryUnaryMultiCallable[google.api.httpbody_pb2.HttpBody, google.api.httpbody_pb2.HttpBody]
    GeolocationSearchInfo: grpc.UnaryUnaryMultiCallable[bugs_pb2.GeolocationSearchInfoReq, google.protobuf.empty_pb2.Empty]
    GeolocationClickInfo: grpc.UnaryUnaryMultiCallable[bugs_pb2.GeolocationClickInfoReq, google.protobuf.empty_pb2.Empty]
    ReportDiagnostics: grpc.UnaryUnaryMultiCallable[bugs_pb2.ReportDiagnosticsReq, google.protobuf.empty_pb2.Empty]
    CheckNativeStatus: grpc.UnaryUnaryMultiCallable[bugs_pb2.CheckNativeStatusReq, bugs_pb2.CheckNativeStatusRes]
    """Diagnostics ping from the native mobile apps."""
    EvaluateFeatureFlag: grpc.UnaryUnaryMultiCallable[bugs_pb2.EvaluateFeatureFlagReq, bugs_pb2.EvaluateFeatureFlagRes]
    """Remotely evaluate a single feature flag for the current session's user (anonymously when
    logged out) and return the resolved value. Evaluated one flag at a time, on demand, so the
    server only evaluates flags the client actually uses - which keeps exposure logging accurate.
    """
    LogExperimentExposure: grpc.UnaryUnaryMultiCallable[bugs_pb2.LogExperimentExposureReq, google.protobuf.empty_pb2.Empty]
    """Record a client-side experiment exposure, reported by the SDK as the user is bucketed."""

class BugsServicer(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def Version(
        self,
        request: google.protobuf.empty_pb2.Empty,
        context: CouchersContext,
        session: orm.Session,
    ) -> bugs_pb2.VersionInfo: ...

    @abc.abstractmethod
    def ReportBug(
        self,
        request: bugs_pb2.ReportBugReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> bugs_pb2.ReportBugRes:
        """Report a bug"""

    @abc.abstractmethod
    def Status(
        self,
        request: bugs_pb2.StatusReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> bugs_pb2.StatusRes: ...

    @abc.abstractmethod
    def GetDescriptors(
        self,
        request: google.protobuf.empty_pb2.Empty,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.api.httpbody_pb2.HttpBody: ...

    @abc.abstractmethod
    def GetNativeUpdateManifest(
        self,
        request: google.api.httpbody_pb2.HttpBody,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.api.httpbody_pb2.HttpBody: ...

    @abc.abstractmethod
    def GeolocationSearchInfo(
        self,
        request: bugs_pb2.GeolocationSearchInfoReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def GeolocationClickInfo(
        self,
        request: bugs_pb2.GeolocationClickInfoReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def ReportDiagnostics(
        self,
        request: bugs_pb2.ReportDiagnosticsReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty: ...

    @abc.abstractmethod
    def CheckNativeStatus(
        self,
        request: bugs_pb2.CheckNativeStatusReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> bugs_pb2.CheckNativeStatusRes:
        """Diagnostics ping from the native mobile apps."""

    @abc.abstractmethod
    def EvaluateFeatureFlag(
        self,
        request: bugs_pb2.EvaluateFeatureFlagReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> bugs_pb2.EvaluateFeatureFlagRes:
        """Remotely evaluate a single feature flag for the current session's user (anonymously when
        logged out) and return the resolved value. Evaluated one flag at a time, on demand, so the
        server only evaluates flags the client actually uses - which keeps exposure logging accurate.
        """

    @abc.abstractmethod
    def LogExperimentExposure(
        self,
        request: bugs_pb2.LogExperimentExposureReq,
        context: CouchersContext,
        session: orm.Session,
    ) -> google.protobuf.empty_pb2.Empty:
        """Record a client-side experiment exposure, reported by the SDK as the user is bucketed."""

def add_BugsServicer_to_server(servicer: BugsServicer, server: grpc.Server) -> None: ...
