# 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
# This file has been @generated

from typing import TYPE_CHECKING

import betterproto
import grpclib
from betterproto.grpc.grpclib_server import ServiceBase
from pydantic import model_validator
from pydantic.dataclasses import (
    dataclass,
    rebuild_dataclass,
)

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
    """Беспроводной интернет"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


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

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
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, config={"extra": "forbid"})
class GetLegoAdapterServiceCheckResponse(betterproto.Message):
    """Результат запроса метода проверки услуги на квартире"""

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

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


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

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

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

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


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

    pass


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

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

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


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

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
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: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = 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: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = 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,
            ),
        }


rebuild_dataclass(GetLegoAdapterServiceCheckRequest)  # type: ignore
rebuild_dataclass(GetLegoAdapterServiceCheckResponse)  # type: ignore
rebuild_dataclass(GetLegoAdapterServiceCheckResponseError)  # type: ignore
