/*
  Cервис-адаптер вокруг Lego API экосистемы РТК
*/
syntax = "proto3";

package keyapis.ecosystem.v1;

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

option java_package = "ru.keyapis.ecosystem.v1";
option java_outer_classname = "KeyapisEcosystemV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/keyapis_ecosystem_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.Ecosystem.V1";
option objc_class_prefix = "KEYAPISECOSYSTEMV1";
option php_namespace = "Keyapis\\Ecosystem\\V1";
option ruby_package = "Keyapis::Ecosystem::V1";
option optimize_for = LITE_RUNTIME;

// Cервис-адаптер вокруг Lego API экосистемы РТК
service LegoAdapterService {
  // Метод проверки услуги.
  // Возвращает true если хотя бы у одного аккаунта на квартире есть нужный сервис и он содержит активный компонент.
  // Метод доступен для: admin, service
  rpc GetLegoAdapterServiceCheck(GetLegoAdapterServiceCheckRequest) returns (GetLegoAdapterServiceCheckResponse) {
    option (google.api.http) = {
      get: "/ecosystem/api/v1/lego_adapter/service/check/{orpon}/{room_number}/{service_type}"
    };
  }
}

// Услуга
message Service {
  // Тип услуги
  enum Type {
    // Значение не указано
    TYPE_UNKNOWN = 0;
    // Cотовая связь
    SOTOVAYA_SVYAZ_MVNO = 1;
    // Цифровое интерактивное ТВ
    IPTV = 2;
    // Домашний интернет
    SHPD = 3;
    // Кабельное цифровое ТВ
    KABELNOE_TV = 4;
    // Стационарный телефон
    FIKSIROVANNAYA_SVYAZ = 5;
    // Лицей
    ROSTELECOM_LYCEUM = 6;
    // Умный дом
    SMART_HOUSE = 7;
    // Юрист
    JURIST = 8;
    // WINK ТВ
    WINK = 9;
    // Оборудование
    SALE_EQUIPMENT = 10;
    // Ключ
    SMART_INTERCOM = 11;
    // Шлагбаум
    SMART_BARRIER = 12;
    // Гарантия плюс
    WARRANTY_PLUS = 13;
    // Аналоговое цифровое ТВ
    ANALOG_CABLE_TV = 14;
    // АЛЛЁ
    OTT_PERSON = 15;
    // Беспроводной интернет
    WIFI = 16;
  }
}

// Запрос проверки услуги на квартире
message GetLegoAdapterServiceCheckRequest {
  // ОРПОН.
  // Идентификатор дома.
  // # Диапазон: 0..9223372036854775807
  int64 orpon = 1 [(google.api.field_behavior) = REQUIRED];
  // Номер квартиры.
  // # Паттерн: /^[0-9]{1,4}$/
  string room_number = 2 [(google.api.field_behavior) = REQUIRED];
  // Тип услуги
  Service.Type service_type = 3 [(google.api.field_behavior) = REQUIRED];
}
// Результат запроса метода проверки услуги на квартире
message GetLegoAdapterServiceCheckResponse {
  // Ошибка запроса метода проверки услуги на квартире
  message Error {
    // Ошибка запроса к API экосистемы
    message EcosystemApiError {}

    // Причина ошибки
    oneof reason {
      // Ошибка валидации запроса информации об услугах пользователя
      ValidationError validation = 1;
      // Ошибка запроса к API экосистемы
      EcosystemApiError ecosystem_api_error = 2;
    }
  }

  // Тип результата
  oneof type {
    // Наличие активной услуги на квартире
    bool data = 1;
    // Ошибка
    Error error = 2;
  }
}

// Ошибки валидации.
// Эти проверки выполняются до обращения в базу данных
message ValidationError {
  // Путь к полю в формате наименования прото
  string path = 1 [(google.api.field_behavior) = REQUIRED];
  // Валидационное сообщение
  string message = 2 [(google.api.field_behavior) = REQUIRED];
}
