# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/signal/v1/keyapis_signal_signal_v1.proto
# plugin: python-betterproto
# This file has been @generated

import betterproto
from pydantic.dataclasses import (
    dataclass,
    rebuild_dataclass,
)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class Signal(betterproto.Message):
    """
    Сигнал.
     Если информация неизвестна то колонки заполняются следующим образом:
     1/ Cтрока - как пустая строка;
     2/ Цифра - как 0;
     3/ Массив - как пустой массив;
     Некоторые данные в одних и тех же сигналах могут отсутствовать.
     Так как в момент создания сигнала их нет в тех сервисах в которых они выполняются.
     Все виды сигналов передаются в топиках: key.signal.*
    """

    time: int = betterproto.int64_field(1)
    """
    Время возникновения сигнала.
     В секундах от 01.01.1970 года в UTC.
     Присутствует всегда
    """

    name: str = betterproto.string_field(2)
    """
    Название сигнала.
     Присутствует всегда
    """

    subject: "SignalEntity" = betterproto.message_field(3)
    """
    Информация о субъекте действия с которым связан сигнал.
     К чему сигнал относится.
     Заполнено если такая информация присутствует в програмном модуле обрабатывающий запрос, иначе пусто.
     Может отсутствовать
    """

    message: str = betterproto.string_field(4)
    """
    Текстовая информация.
     К примеру текст ошибки.
     Может отсутствовать
    """

    subscription: "SignalSubscription" = betterproto.message_field(5)
    """
    Информация о подписке с которой связан сигнал.
     Характеризует что доступно или не доступно пользователю.
     Заполнено если такая информация присутствует в програмном модуле обрабатывающий запрос, иначе пусто.
     Может отсутствовать
    """

    invoice: "SignalInvoice" = betterproto.message_field(6)
    """
    Информация о выставленном счёте с которым связан сигнал.
     Характеризует состояние оплаты.
     Заполнено если такая информация присутствует в програмном модуле обрабатывающий запрос, иначе пусто.
     Может отсутствовать
    """

    object: "SignalEntity" = betterproto.message_field(7)
    """
    Информация о объекте действия с которым связан сигнал.
     К чему сигнал относится.
     Заполнено если такая информация присутствует в програмном модуле обрабатывающий запрос, иначе пусто.
     Может отсутствовать
    """

    payload: "dict[str, str]" = betterproto.map_field(
        8, betterproto.TYPE_STRING, betterproto.TYPE_STRING
    )
    """
    Дополнительная полезная нагрузка.
     К примеру тэги.
     Тут можно поместить ту информацию которая не вошла в схему, но будет полезна или стала нужна
    """

    meta: "dict[str, str]" = betterproto.map_field(
        9, betterproto.TYPE_STRING, betterproto.TYPE_STRING
    )
    """
    Мета информация.
     Некоторая информация которая присутствует в запросе.
     К примеру это http заголовки запроса: X-Request-Id, User-Agent, X-Forwarded-For и тд
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SignalEntity(betterproto.Message):
    """Сущность"""

    place_id: str = betterproto.string_field(1)
    """
    Область размещения.
     Обычно это идентификатор дома в стандарте ОРПОН.
     Может отсутствовать
    """

    place_label: str = betterproto.string_field(2)
    """
    Место размещение.
     Обычно это номер квартиры.
     Может отсутствовать
    """

    user_id: str = betterproto.string_field(3)
    """
    Идентификатор пользователя.
     Может отсутствовать
    """

    user_label: str = betterproto.string_field(4)
    """
    Лейбл пользователя.
     Обычно это тип/роль пользователя.
     Может отсутствовать
    """

    group_id: str = betterproto.string_field(5)
    """
    Идентификатор группы.
     Обычно это идентификатор компании.
     Может отсутствовать
    """

    group_title: str = betterproto.string_field(6)
    """
    Название группы.
     Обычно это название компании.
     Может отсутствовать
    """

    device_id: str = betterproto.string_field(7)
    """
    Идентификатор устройства.
     Может отсутствовать
    """

    device_label: str = betterproto.string_field(8)
    """
    Лейбл устройства.
     Может отсутствовать
    """

    device_relay_index: str = betterproto.string_field(9)
    """
    Индекс реле устройства.
     Может отсутствовать
    """

    camera_id: str = betterproto.string_field(10)
    """
    Идентификатор камеры.
     Может отсутствовать
    """

    camera_label: str = betterproto.string_field(11)
    """
    Лейбл камеры.
     Может отсутствовать
    """

    key: str = betterproto.string_field(12)
    """
    Номер ключа.
     Может отсутствовать
    """

    code: str = betterproto.string_field(13)
    """
    Код.
     Может отсутствовать
    """

    dtmf_code: str = betterproto.string_field(14)
    """
    ДТМФ код открытия.
     Может отсутствовать
    """

    phone: str = betterproto.string_field(15)
    """
    Номер телефона.
     Может отсутствовать
    """

    payload: "dict[str, str]" = betterproto.map_field(
        16, betterproto.TYPE_STRING, betterproto.TYPE_STRING
    )
    """
    Дополнительная полезная нагрузка.
     К примеру дополнительные детали сущности.
     Тут можно поместить ту информацию которая не вошла в схему, но будет полезна или стала нужна
    """

    email: str = betterproto.string_field(17)
    """
    Почтовый адрес.
     Может отсутствовать
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SignalSubscription(betterproto.Message):
    """Информация о подписке"""

    id: str = betterproto.string_field(1)
    """
    Идентификатор подписки.
     Может отсутствовать
    """

    title: str = betterproto.string_field(2)
    """
    Название подписки.
     Может отсутствовать
    """

    status: str = betterproto.string_field(3)
    """
    Статус подписки.
     Может отсутствовать
    """

    privileges: "list[str]" = betterproto.string_field(4)
    """
    Привилегии подписок.
     Может отсутствовать
    """

    payload: "dict[str, str]" = betterproto.map_field(
        5, betterproto.TYPE_STRING, betterproto.TYPE_STRING
    )
    """
    Дополнительная полезная нагрузка.
     К примеру дополнительные детали подписки.
     Тут можно поместить ту информацию которая не вошла в схему, но будет полезна или стала нужна
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class SignalInvoice(betterproto.Message):
    """Информация о выставленном счёте"""

    id: str = betterproto.string_field(1)
    """
    Идентификато выставленного счёта.
     Может отсутствовать
    """

    title: str = betterproto.string_field(2)
    """
    Назначение выставленного счёта.
     Может отсутствовать
    """

    total_amount: float = betterproto.float_field(3)
    """
    Общая сумма чека.
     В рублях.
     Может отсутствовать
    """

    status: str = betterproto.string_field(4)
    """
    Статус выставленного счёта.
     Может отсутствовать
    """

    phone: str = betterproto.string_field(5)
    """
    Номер телефона на который пользователь хочет получить информацию об оплате.
     Может отсутствовать
    """

    email: str = betterproto.string_field(6)
    """
    Почта на которую пользователь хочет получить информацию об оплате.
     Может отсутствовать
    """

    position_ids: "list[str]" = betterproto.string_field(7)
    """
    Идентификаторы товаров позиций на которые выставленн счёт.
     Обычно это идентификаторы подписок.
     Может отсутствовать
    """

    payload: "dict[str, str]" = betterproto.map_field(
        8, betterproto.TYPE_STRING, betterproto.TYPE_STRING
    )
    """
    Дополнительная полезная нагрузка.
     К примеру дополнительные детали выставленного счёта.
     Тут можно поместить ту информацию которая не вошла в схему, но будет полезна или стала нужна
    """


rebuild_dataclass(Signal)  # type: ignore
rebuild_dataclass(SignalEntity)  # type: ignore
rebuild_dataclass(SignalSubscription)  # type: ignore
rebuild_dataclass(SignalInvoice)  # type: ignore
