/*
   Сервис предоставляет возможность управлять справочниками телеметрии
*/
syntax = "proto3";

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

package keyapis.telemetry_control.v1;

option java_package = "ru.keyapis.telemetry_control.v1";
option java_outer_classname = "KeyapisTelemetryControlV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/keyapis_telemetry_control_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.TelemetryControl.V1";
option objc_class_prefix = "KEYAPISTELEMETRYCONTROLV1";
option php_namespace = "Keyapis\\TelemetryControl\\V1";
option ruby_package = "Keyapis::TelemetryControl::V1";
option optimize_for = LITE_RUNTIME;

// Сервис управления справочниками телеметрии.
// Авторизация:
//   - Authorization: Bearer token
service DictionaryService {
  // Метод получения списка моделей ПУ.
  // Метод доступен для: Token: admin, service, application, bti, owner, employee, seller. Без учета разрешений
  rpc GetDictionaryDeviceModelList (GetDictionaryDeviceModelListRequest) returns (stream GetDictionaryDeviceModelListResponse) {
    option (google.api.http) = {
      get: "/telemetry_control/api/v1/dictionary/device_model/list"
    };
  }
  // Метод получения количества моделей ПУ.
  // Метод доступен для: Token: admin, service, application, bti, owner, employee, seller. Без учета разрешений
  rpc GetDictionaryDeviceModelCount (GetDictionaryDeviceModelCountRequest) returns (GetDictionaryDeviceModelCountResponse) {
    option (google.api.http) = {
      get: "/telemetry_control/api/v1/dictionary/device_model/count"
    };
  }
  // Метод сохранения модели ПУ.
  // Поддерживает создание и обновление.
  // Метод доступен для: Token: admin, service, application. Без учета разрешений
  rpc PostDictionaryDeviceModel (PostDictionaryDeviceModelRequest) returns (PostDictionaryDeviceModelResponse) {
    option (google.api.http) = {
      post: "/telemetry_control/api/v1/dictionary/device_model"
      body: "*"
    };
  }
  // Метод удаления модели ПУ.
  // Метод доступен для: Token: admin, service, application. Без учета разрешений
  rpc DeleteDictionaryDeviceModel (DeleteDictionaryDeviceModelRequest) returns (DeleteDictionaryDeviceModelResponse) {
    option (google.api.http) = {
      delete: "/telemetry_control/api/v1/dictionary/device_model/{id}"
    };
  }
  // Метод получения списка элементов справочника Макрорегионы (МРФ).
  // Метод доступен для: Token: admin, service, application, bti, owner, employee, seller. Без учета разрешений
  rpc GetDictionaryMrfList (GetDictionaryMrfListRequest) returns (stream GetDictionaryMrfListResponse) {
    option (google.api.http) = {
      get: "/telemetry_control/api/v1/dictionary/mrf/list"
    };
  }
  // Метод получения количества элементов справочника Макрорегионы (МРФ).
  // Метод доступен для: Token: admin, service, application, bti, owner, employee, seller. Без учета разрешений
  rpc GetDictionaryMrfCount (GetDictionaryMrfCountRequest) returns (GetDictionaryMrfCountResponse) {
    option (google.api.http) = {
      get: "/telemetry_control/api/v1/dictionary/mrf/count"
    };
  }
  // Метод получения списка элементов справочника Регионы (РФ).
  // Метод доступен для: Token: admin, service, application, bti, owner, employee, seller. Без учета разрешений
  rpc GetDictionaryRfList (GetDictionaryRfListRequest) returns (stream GetDictionaryRfListResponse) {
    option (google.api.http) = {
      get: "/telemetry_control/api/v1/dictionary/rf/list"
    };
  }
  // Метод получения количества элементов справочника Регионы (РФ).
  // Метод доступен для: Token: admin, service, application, bti, owner, employee, seller. Без учета разрешений
  rpc GetDictionaryRfCount (GetDictionaryRfCountRequest) returns (GetDictionaryRfCountResponse) {
    option (google.api.http) = {
      get: "/telemetry_control/api/v1/dictionary/rf/count"
    };
  }
}

// Запрос сохранения модели ПУ
message PostDictionaryDeviceModelRequest {
  // Шаблон ПУ
  DictionaryDeviceModel data = 1 [(google.api.field_behavior) = REQUIRED];
}

// Ответ на запрос сохранения модели ПУ
message PostDictionaryDeviceModelResponse {
  // Тип результата
  oneof type {
    // Шаблон ПУ
    DictionaryDeviceModel data = 1;
  }
}

// Запрос удаления модели ПУ
message DeleteDictionaryDeviceModelRequest {
  // Идентификатор
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
}
// Ответ на запрос удаления модели ПУ
message DeleteDictionaryDeviceModelResponse {}

// Запрос получения модели ПУ
message GetDictionaryDeviceModelRequest {
  // Идентификатор модели ПУ
  int32 id = 1 [(google.api.field_behavior) = REQUIRED];
}

// Ответ на запрос получения модели ПУ
message GetDictionaryDeviceModelResponse {
  // Тип результата
  oneof type {
    // Элемент справочника моделей
    DictionaryDeviceModel data = 1;
  }
}

// Запрос получения списка моделей ПУ
message GetDictionaryDeviceModelListRequest {
  // Фильтр
  DictionaryDeviceModelFilter filter = 1;
  // Вариант разбиения на страницы
  oneof pagination {
    // Пагинация
    DictionaryDeviceModelPaging paging = 2;
  }
}

// Запрос получения элементов справочника Макрорегионы (МРФ)
message GetDictionaryMrfListRequest {
}

// Запрос получения элементов справочника Регионы (РФ)
message GetDictionaryRfListRequest {
}

// Пагинация
message DictionaryDeviceModelPaging {
  // Справочник типов значений сортировки
  enum OrderByType {
    // Значение не указано
    ORDER_BY_TYPE_UNKNOWN = 0;
    // По идентификатору
    ID = 1;
    // По заголовку элемента
    TITLE = 2;
  }
  // Тип значения сортировки.
  // По умолчанию: ID
  OrderByType order_by_type = 1;
  // Справочник типов направлений сортировки.
  // По умолчанию: ASC
  enum DirectionType {
    // Значение не указано
    DIRECTION_TYPE_UNKNOWN = 0;
    // От большего к меньшему
    DESC = 1;
    // От меньшего к большему
    ASC = 2;
  }
  // Тип направления сортировки.
  // По умолчанию: DESC
  DirectionType direction_type = 2;
  // Количество.
  // Минимальное значение: 1.
  // Максимальное значение: 100.
  // По умолчанию: 20.
  // Если значение 0 (не передано) то выставляем значение по умолчанию
  int32 limit = 3;
  // Сдвиг.
  // По умолчанию: 0
  int32 offset = 4;
}

// Фильтр для запроса моделей приборов учета.
// При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
// При передаче нескольких разных параметров фильтра они работают в выборке через И
message DictionaryDeviceModelFilter {
  // По заголовку элемента
  repeated string titles = 1;
  // По типам модели
  repeated string model_kinds = 2;
}

// Ответ на запрос получения списка моделей приборов учета
message GetDictionaryDeviceModelListResponse {
  // Тип результата
  oneof type {
    // Элемент справочника моделей ПУ
    DictionaryDeviceModel data = 1;
  }
}

// Ответ на запрос получения элементов справочника Макрорегионы (МРФ)
message GetDictionaryMrfListResponse {
  // Тип результата
  oneof type {
    // Элемент справочника Макрорегионы (МРФ)
    DictionaryMrf data = 1;
  }
}

// Элемент справочника Макрорегионы (МРФ)
message DictionaryMrf {
  // Справочник Макрорегионы (МРФ)
  enum MrfType {
    // Значение не указано
    MRF_TYPE_UNKNOWN = 0;
    // Центр
    TSENTR = 1;
    // Юг
    YUG = 2;
    // Урал
    URAL = 3;
    // Сибирь
    SIBIR = 4;
    // Северо-Запад
    SEVERO_ZAPAD = 5;
    //Дальний Восток
    DALNIY_VOSTOK = 6;
    // Волга
    VOLGA = 7;
  }
  // Идентификатор
  int32 id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Дата создания
  google.protobuf.Timestamp created_at = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Дата последнего изменения.
  // Заполняется и обновляется сервером.
  // Заполняется при создании и изменении
  google.protobuf.Timestamp changed_at = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Локализованный заголовок элемента
  google.protobuf.StringValue title = 4;
  // Техническое наименование элемента
  google.protobuf.StringValue code = 5;
}

// Ответ на запрос получения элементов справочника Регионы (РФ)
message GetDictionaryRfListResponse {
  // Тип результата
  oneof type {
    // Элемент справочника Регионы (РФ)
    DictionaryRf data = 1;
  }
}

// Элемент справочника Разрешения Телеметрии
message DictionaryPermission {
  // Справочник Разрешения Телеметрии
  enum PermissionType {
    // Значение не указано
    PERMISSION_TYPE_UNKNOWN = 0;
  }
  // Элемент справочника Разрешения Телеметрии
  PermissionType permission_type = 1;
}

// Элемент справочника Регионы (РФ)
message DictionaryRf {
  // Справочник Регионы (РФ)
  enum RfType {
    // Значение не указано
    RF_TYPE_UNKNOWN = 0;
    // Республика Башкортостан
    UFA = 1;
    // Кировская область
    KIROV = 2;
    // Ивановский филиал
    IVANOVO = 3;
    // Калужский филиал
    KALUGA = 4;
    // Костромской филиал
    KOSTROMA = 5;
    // Курский филиал
    KURSK = 6;
    // Липецкий филиал
    LIPETSK = 7;
    // Московская область
    MOSOBLAST = 8;
    // Орловский филиал
    OREL = 9;
    // Рязанский филиал
    RYAZAN = 10;
    // Тамбовский филиал
    TAMBOV = 11;
    // Тверской филиал
    TVER = 12;
    // Ярославский филиал
    YAROSLAVL = 13;
    // Смоленский филиал
    SMOLENSK = 14;
    // Тульский филиал
    TULA = 15;
    // Москва
    MOSCOW = 16;
    // ЕАО
    EAO = 17;
    // Филиал в Тюменской и Курганской областях
    KURGAN = 18;
    // Филиал в Тюменской и Курганской областях
    TUMEN = 19;
    // Ханты-Мансийский филиал
    HANTY = 20;
    // Амурская область
    AMUR = 21;
    // Камчатский край
    KAMCHATKA = 22;
    // Магаданская область
    MAGADAN = 23;
    // Приморский край
    PRIMORYE = 24;
    // Сахалинская область
    SAKHALIN = 25;
    // Хабаровский край
    KHABAROVSK = 26;
    // Забайкальский край
    CHITA = 27;
    // ЧАО
    CHUKOTKA = 28;
    // Архангельск
    ARCHANGELSK = 29;
    // Вологда
    VOLOGDA = 30;
    // Калининград
    KALININGRAD = 31;
    // Карелия
    KARELIA = 32;
    // Коми
    KOMI = 33;
    // Лен область
    LENOBLAST = 34;
    // Мурманск
    MURMANSK = 35;
    // Новгород
    NOVGOROD = 36;
    // Псков
    PSKOV = 37;
    // СПб
    SPB = 38;
    // Алтайский филиал
    ALTAI = 39;
    // Бурятский филиал
    BURYATIYA = 40;
    // Иркутский филиал
    IRKUTSK = 41;
    // Кемеровский филиал
    KEMEROVO = 42;
    // Красноярский филиал
    KRASNOYARSK = 43;
    // Омский филиал
    OMSK = 44;
    // Республика Хакасия
    HAKASIYA = 45;
    // Республика Алтай
    RALTAY = 46;
    // Республика Тыва
    TUVA = 47;
    // Томский филиал
    TOMSK = 48;
    // Оренбургская область
    ORENBURG = 49;
    // Белгородский филиал
    BELGOROD = 50;
    // Саха
    SAKHA = 51;
    // Екатеринбургский филиал
    EKT = 52;
    // Волгоградский филиал
    VOLGOGRAD = 53;
    // Ямало-Ненецкий филиал
    YAMAL = 54;
    // Челябинский филиал
    CHELYABINSK = 55;
    // Пермский филиал ПАО "Ростелеком"
    PERM = 56;
    // Республика Марий Эл
    MARYEL = 57;
    // Пензенская область
    PENZA = 58;
    // Ингушский филиал
    INGUSHETIA = 59;
    // Кабардино-Балкарский филиал
    NALCHIK = 60;
    // Калмыцкий филиал
    ELISTA = 61;
    // Ростовский филиал
    ROSTOV = 62;
    // Дагестанский филиал
    MAHACHKALA = 63;
    // Республика Мордовия
    MORDOVIYA = 64;
    // Республика Татарстан (Татарстан)
    KAZAN = 65;
    // Самарская область
    SAMARA = 66;
    // Саратовская область
    SARATOV = 67;
    // Удмуртская Республика
    UDMURTIYA = 68;
    // Ульяновская область
    ULYANOVSK = 69;
    // Чувашская Республика - Чувашия
    CHUVASHIYA = 70;
    // Нижегородская область
    NNOVGOROD = 71;
    // Брянский филиал
    BRYANSK = 72;
    // Владимирский филиал
    VLADIMIR = 73;
    // Воронежский филиал
    VORONEZH = 74;
    // Северо-Осетинский филиал
    VLADIKAVKAZ = 75;
    // Ставропольский филиал
    STAVROPOL = 76;
    // Республика Карачаево-Черкесская
    CHERKESSK = 77;
    // Республика Адыгея
    MAYKOP = 78;
    // Астраханский филиал
    ASTRAKHAN = 79;
    // Краснодарский филиал
    KRASNODAR = 80;
    // Тестовый
    TEST = 81;
    // Новосибирский филиал
    NOVOSIBIRSK = 82;
  }
  // Идентификатор
  int32 id = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Дата создания
  google.protobuf.Timestamp created_at = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Дата последнего изменения.
  // Заполняется и обновляется сервером.
  // Заполняется при создании и изменении
  google.protobuf.Timestamp changed_at = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Локализованный заголовок элемента
  google.protobuf.StringValue title = 4;
  // Техническое наименование элемента
  google.protobuf.StringValue code = 5;
  // Принадлежность региона к Макрорегиону (МРФ)
  int32 mrf_id = 6 [(google.api.field_behavior) = REQUIRED];
}

// Запрос получения количества моделей приборов учета
message GetDictionaryDeviceModelCountRequest {
  // Фильтр по моделям приборов учета
  DictionaryDeviceModelFilter filter = 1;
}

// Ответ на запрос получения количества моделей приборов учета
message GetDictionaryDeviceModelCountResponse {
  // Тип результата
  oneof type {
    // Всего моделей приборов учета
    int32 data = 1;
  }
}

// Запрос получения количества элементов справочника Макрорегионы (МРФ)
message GetDictionaryMrfCountRequest {
}

// Ответ на запрос получения количества элементов справочника Макрорегионы (МРФ)
message GetDictionaryMrfCountResponse {
  // Тип результата
  oneof type {
    // Всего элементов справочника Макрорегионы (МРФ)
    int32 data = 1;
  }
}

// Запрос получения количества элементов справочника Регионы (РФ)
message GetDictionaryRfCountRequest {
}

// Ответ на запрос получения количества элементов справочника Регионы (РФ)
message GetDictionaryRfCountResponse {
  // Тип результата
  oneof type {
    // Всего элементов справочника Регионы (РФ)
    int32 data = 1;
  }
}

// Элемент справочника моделей ПУ
message DictionaryDeviceModel {
  // Идентификатор
  int32 id = 1;
  // Дата создания
  google.protobuf.Timestamp created_at = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Дата последнего изменения.
  // Заполняется и обновляется сервером.
  // Заполняется при создании и изменении
  google.protobuf.Timestamp changed_at = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Модель счетчика
  google.protobuf.StringValue title = 4;
  // Протокол счетчика
  google.protobuf.StringValue protocol = 5;
  // Тип модели
  google.protobuf.StringValue model_kind = 6;
}
