/*
  События помещений
*/
syntax = "proto3";

import "google/api/field_behavior.proto";
import "google/protobuf/wrappers.proto";

package keyapis.access_control.v1;

option java_package = "ru.keyapis.access_control.v1";
option java_outer_classname = "KeyapisAccessControlV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/keyapis_access_control_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.AccessControl.V1";
option objc_class_prefix = "KEYAPISACCESSCONTROLV1";
option php_namespace = "Keyapis\\AccessControl\\V1";
option ruby_package = "Keyapis::AccessControl::V1";
option optimize_for = LITE_RUNTIME;

// Задача на активацию аналоговых трубок квартир для устройства на доме.
// Очередь key.access_control.activate_cms
message ActivateCmsSettingsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор ОРПОН дома
  int64 orpon_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 3 [(google.api.field_behavior) = REQUIRED];
  // Номера квартир с включенным режимом подписок, у которых блокируется аналоговая трубка
  repeated string room_numbers = 4 [(google.api.field_behavior) = REQUIRED];
}

// Задача на блокировку аналоговых трубок квартир для устройства на доме.
// Очередь key.access_control.block_cms
message BlockCmsSettingsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор ОРПОН дома
  int64 orpon_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 3 [(google.api.field_behavior) = REQUIRED];
  // Номера квартир с включенным режимом подписок, у которых активируется аналоговая трубка
  repeated string room_numbers = 4 [(google.api.field_behavior) = REQUIRED];
}

// Задача на активацию аналоговых трубок квартир для устройства на доме без дополнительных проверок на устройстве.
// Очередь key.access_control.force_activate_cms
message ForceActivateCmsSettingsTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор ОРПОН дома
  int64 orpon_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 3 [(google.api.field_behavior) = REQUIRED];
  // Номера квартир для которых необходимо активация аналоговых трубок
  repeated string room_numbers = 4 [(google.api.field_behavior) = REQUIRED];
}
// Задача ответ на конфигурацию квартир.
// Очередь key.access_control.configure_rooms_result
message ConfigureRoomsResultTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор устройства
  int32 device_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Результат конфигурации квартиры
  message Room {
    // Идентификатор квартиры
    int32 room_id = 1 [(google.api.field_behavior) = REQUIRED];
    // Признак "Сконфигурировано"
    bool is_configured = 2 [(google.api.field_behavior) = REQUIRED];
    // Текст ошибки
    string error_message = 3;
  }
  // Список квартир с результатом конфигурации
  repeated Room rooms = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача на добавление ключей на устройства.
// Очередь key.access_control.load_rfids_to_devices
message LoadRfidsToDevicesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Ключ
  message Rfid {
    // Идентификатор
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Значение ключа
    string key = 2 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 3 [(google.api.field_behavior) = REQUIRED];
    // Идентификатор квартиры
    int32 room_id = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Список ключей
  repeated Rfid rfids = 2 [(google.api.field_behavior) = REQUIRED];
  // Список идентификаторов устройств
  repeated int32 device_ids = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача на добавление кодов на устройства.
// Очередь key.access_control.load_codes_to_devices
message LoadCodesToDevicesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Код
  message Code {
    // Идентификатор
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Значение кода
    string code = 2 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 3 [(google.api.field_behavior) = REQUIRED];
    // Идентификатор квартиры
    int32 room_id = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Список кодов
  repeated Code codes = 2 [(google.api.field_behavior) = REQUIRED];
  // Список идентификаторов устройств
  repeated int32 device_ids = 3 [(google.api.field_behavior) = REQUIRED];
}

// Задача на удаление ключей с устройств.
// Очередь key.access_control.delete_rfids_from_devices
message DeleteRfidsFromDevicesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Ключ
  message Rfid {
    // Идентификатор
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Значение ключа
    string key = 2 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 3 [(google.api.field_behavior) = REQUIRED];
    // Идентификатор квартиры
    int32 room_id = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Список ключей
  repeated Rfid rfids = 2 [(google.api.field_behavior) = REQUIRED];
  // Список идентификаторов устройств
  repeated int32 device_ids = 3 [(google.api.field_behavior) = REQUIRED];
  // Удаление без ожидания ответа от устройства
  google.protobuf.BoolValue is_force_delete = 4;
}

// Задача на удаление кодов с устройств.
// Очередь key.access_control.delete_codes_from_devices
message DeleteCodesFromDevicesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Код
  message Code {
    // Идентификатор
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Значение кода
    string code = 2 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 3 [(google.api.field_behavior) = REQUIRED];
    // Идентификатор квартиры
    int32 room_id = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Список кодов
  repeated Code codes = 2 [(google.api.field_behavior) = REQUIRED];
  // Список идентификаторов устройств
  repeated int32 device_ids = 3 [(google.api.field_behavior) = REQUIRED];
  // Удаление без ожидания ответа от устройства
  google.protobuf.BoolValue is_force_delete = 4;
}

// Команда на подготовку и старт оповещения через домофоны.
// Очередь key.access_control.alert.prepare_start
message PrepareStartTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Ссылка на звуковой файл для проигрывания.
  // Файл должен лежать на внутреннем хранилище.
  // # Диапазон: 2..100
  string sound_file_uri = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор ОРПОН дома, на котором запускаем проигрывание
  int64 orpon = 3 [(google.api.field_behavior) = REQUIRED];
  // Длительность воспроизведения такта в секундах.
  // Такт включает в себя проигрывание файла на трубках или на динамике.
  // # Диапазон: 0..65536
  int32 tact_play_duration = 4 [(google.api.field_behavior) = REQUIRED];
  // Количество последовательных повторов тактов перед сменой динамика на трубки или наоборот.
  // # Диапазон: 0..65536
  int32 tact_repeat_count = 5 [(google.api.field_behavior) = REQUIRED];
  // Количество дополнительных повторов тактов, т.е. умолчание=0 - это проигрывание одного такта.
  // # Диапазон: 0..65536
  int32 play_repeat_count = 6 [(google.api.field_behavior) = REQUIRED];
  // Тип проигрывания.
  // # Тип: byte
  enum PlayType {
    // Значение не указано
    PLAY_TYPE_UNKNOWN = 0;
    // Только на аналоговые трубки
    HANDSET_ONLY = 1;
    // Tолько на динамик домофона
    SPEAKER_ONLY = 2;
    // Сначала на аналоговые трубки проигрываем заданное количество тактов, затем на динамик домофона
    HANDSET_AND_SPEAKER = 3;
    // Сначала на динамик домофона проигрываем заданное количество тактов, затем на аналоговые трубки
    SPEAKER_AND_HANDSET = 4;
  }
  // Тип проигрывания
  PlayType play_type = 7 [(google.api.field_behavior) = REQUIRED];
}

// Задача на удаление ключей со всех устройств.
// Очередь key.access_control.delete_rfids_from_all_devices
message DeleteRfidsFromAllDevicesTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Ключ
  message Rfid {
    // Идентификатор
    int32 id = 1 [(google.api.field_behavior) = REQUIRED];
    // Значение ключа
    string key = 2 [(google.api.field_behavior) = REQUIRED];
    // Номер квартиры
    string room_number = 3 [(google.api.field_behavior) = REQUIRED];
    // Идентификатор квартиры
    int32 room_id = 4 [(google.api.field_behavior) = REQUIRED];
  }
  // Список ключей
  repeated Rfid rfids = 2 [(google.api.field_behavior) = REQUIRED];
  // Удаление без ожидания ответа от устройства
  google.protobuf.BoolValue is_force_delete = 3;
}

// Результат задачи на удаление ключа со всех устройств.
// Очередь key.access_control.delete_rfids_from_all_devices_result
message DeleteRfidsFromAllDevicesResultTask {
  // Идентификатор запроса
  string request_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор ключа
  int32 rfid_id = 2 [(google.api.field_behavior) = REQUIRED];
  // Справочник статусов удаления ключа со всех устройств.
  // # Тип: byte
  enum StatusType {
    // Значение не указано
    STATUS_TYPE_UNKNOWN = 0;
    // Настроен
    SUCCESS = 1;
    // Ошибка
    ERROR = 2;
  }
  // Статус удаления ключа со всех устройств
  StatusType status_type = 3 [(google.api.field_behavior) = REQUIRED];
}