# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/signal/v1/keyapis_signal_signal_v1.proto
# plugin: python-betterproto
from dataclasses import dataclass
from typing import (
    Dict,
    List,
)

import betterproto


@dataclass(eq=False, repr=False)
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)
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)
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)
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
    )
    """
    Дополнительная полезная нагрузка. К примеру дополнительные детали
    выставленного счёта. Тут можно поместить ту информацию которая не вошла в
    схему, но будет полезна или стала нужна
    """
