# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/ecosystem/v1/keyapis_ecosystem_lego_adapter_v1.proto, keyapis/ecosystem/v1/keyapis_ecosystem_system_v1.proto
# plugin: python-betterproto
from dataclasses import dataclass
from typing import (
    TYPE_CHECKING,
    Dict,
    Optional,
)

import betterproto
import grpclib
from betterproto.grpc.grpclib_server import ServiceBase

if TYPE_CHECKING:
    import grpclib.server
    from betterproto.grpc.grpclib_client import MetadataLike
    from grpclib.metadata import Deadline


class ServiceType(betterproto.Enum):
    """Тип услуги"""

    TYPE_UNKNOWN = 0
    """Значение не указано"""

    SOTOVAYA_SVYAZ_MVNO = 1
    """Cотовая связь"""

    IPTV = 2
    """Цифровое интерактивное ТВ"""

    SHPD = 3
    """Домашний интернет"""

    KABELNOE_TV = 4
    """Кабельное цифровое ТВ"""

    FIKSIROVANNAYA_SVYAZ = 5
    """Стационарный телефон"""

    ROSTELECOM_LYCEUM = 6
    """Лицей"""

    SMART_HOUSE = 7
    """Умный дом"""

    JURIST = 8
    """Юрист"""

    WINK = 9
    """WINK ТВ"""

    SALE_EQUIPMENT = 10
    """Оборудование"""

    SMART_INTERCOM = 11
    """Ключ"""

    SMART_BARRIER = 12
    """Шлагбаум"""

    WARRANTY_PLUS = 13
    """Гарантия плюс"""

    ANALOG_CABLE_TV = 14
    """Аналоговое цифровое ТВ"""

    OTT_PERSON = 15
    """АЛЛЁ"""

    WIFI = 16
    """Беспроводной интернет"""


@dataclass(eq=False, repr=False)
class Service(betterproto.Message):
    """Услуга"""

    pass


@dataclass(eq=False, repr=False)
class GetLegoAdapterServiceCheckRequest(betterproto.Message):
    """Запрос проверки услуги на квартире"""

    orpon: int = betterproto.int64_field(1)
    """ОРПОН. Идентификатор дома. # Диапазон: 0..9223372036854775807"""

    room_number: str = betterproto.string_field(2)
    """Номер квартиры. # Паттерн: /^[0-9]{1,4}$/"""

    service_type: "ServiceType" = betterproto.enum_field(3)
    """Тип услуги"""


@dataclass(eq=False, repr=False)
class GetLegoAdapterServiceCheckResponse(betterproto.Message):
    """Результат запроса метода проверки услуги на квартире"""

    data: bool = betterproto.bool_field(1, group="type")
    """Наличие активной услуги на квартире"""

    error: "GetLegoAdapterServiceCheckResponseError" = betterproto.message_field(
        2, group="type"
    )
    """Ошибка"""


@dataclass(eq=False, repr=False)
class GetLegoAdapterServiceCheckResponseError(betterproto.Message):
    """Ошибка запроса метода проверки услуги на квартире"""

    validation: "ValidationError" = betterproto.message_field(1, group="reason")
    """Ошибка валидации запроса информации об услугах пользователя"""

    ecosystem_api_error: "GetLegoAdapterServiceCheckResponseErrorEcosystemApiError" = (
        betterproto.message_field(2, group="reason")
    )
    """Ошибка запроса к API экосистемы"""


@dataclass(eq=False, repr=False)
class GetLegoAdapterServiceCheckResponseErrorEcosystemApiError(betterproto.Message):
    """Ошибка запроса к API экосистемы"""

    pass


@dataclass(eq=False, repr=False)
class ValidationError(betterproto.Message):
    """
    Ошибки валидации. Эти проверки выполняются до обращения в базу данных
    """

    path: str = betterproto.string_field(1)
    """Путь к полю в формате наименования прото"""

    message: str = betterproto.string_field(2)
    """Валидационное сообщение"""


@dataclass(eq=False, repr=False)
class GetSystemStatusRequest(betterproto.Message):
    """Запрос проверки доступности сервиса"""

    pass


@dataclass(eq=False, repr=False)
class GetSystemStatusResponse(betterproto.Message):
    """Ответ на запрос проверки доступности сервиса"""

    pass


class LegoAdapterServiceStub(betterproto.ServiceStub):
    async def get_lego_adapter_service_check(
        self,
        get_lego_adapter_service_check_request: "GetLegoAdapterServiceCheckRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetLegoAdapterServiceCheckResponse":
        return await self._unary_unary(
            "/keyapis.ecosystem.v1.LegoAdapterService/GetLegoAdapterServiceCheck",
            get_lego_adapter_service_check_request,
            GetLegoAdapterServiceCheckResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SystemServiceStub(betterproto.ServiceStub):
    async def get_system_status(
        self,
        get_system_status_request: "GetSystemStatusRequest",
        *,
        timeout: Optional[float] = None,
        deadline: Optional["Deadline"] = None,
        metadata: Optional["MetadataLike"] = None
    ) -> "GetSystemStatusResponse":
        return await self._unary_unary(
            "/keyapis.ecosystem.v1.SystemService/GetSystemStatus",
            get_system_status_request,
            GetSystemStatusResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class LegoAdapterServiceBase(ServiceBase):

    async def get_lego_adapter_service_check(
        self,
        get_lego_adapter_service_check_request: "GetLegoAdapterServiceCheckRequest",
    ) -> "GetLegoAdapterServiceCheckResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_lego_adapter_service_check(
        self,
        stream: "grpclib.server.Stream[GetLegoAdapterServiceCheckRequest, GetLegoAdapterServiceCheckResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_lego_adapter_service_check(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.ecosystem.v1.LegoAdapterService/GetLegoAdapterServiceCheck": grpclib.const.Handler(
                self.__rpc_get_lego_adapter_service_check,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetLegoAdapterServiceCheckRequest,
                GetLegoAdapterServiceCheckResponse,
            ),
        }


class SystemServiceBase(ServiceBase):

    async def get_system_status(
        self, get_system_status_request: "GetSystemStatusRequest"
    ) -> "GetSystemStatusResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_system_status(
        self,
        stream: "grpclib.server.Stream[GetSystemStatusRequest, GetSystemStatusResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_system_status(request)
        await stream.send_message(response)

    def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
        return {
            "/keyapis.ecosystem.v1.SystemService/GetSystemStatus": grpclib.const.Handler(
                self.__rpc_get_system_status,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSystemStatusRequest,
                GetSystemStatusResponse,
            ),
        }
