/*
  Сервис работы со справочниками атрибутов камер
*/
syntax = "proto3";
package keyapis.vc.v1;
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/descriptor.proto";
import "google/protobuf/wrappers.proto";
import "google/protobuf/timestamp.proto";

option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.Vc.V1";
option go_package = "/keyapis_vc_v1";
option java_multiple_files = false;
option java_outer_classname = "KeyapisVcV1Proto";
option java_package = "ru.keyapis.vc.v1";
option java_string_check_utf8 = true;
option objc_class_prefix = "KEYAPISVCV1";
option optimize_for = LITE_RUNTIME;
option php_namespace = "Keyapis\\Vc\\V1";
option ruby_package = "Keyapis::Vc::V1";

// Сервис работы со справочниками атрибутов камер
service DictionaryService {
  // Метод получения справочника категорий.
  // Метод доступен для: admin, service, bti, owner, employee
  rpc GetDictionaryCategories ( GetDictionaryCategoriesRequest ) returns ( GetDictionaryCategoriesResponse ) {
    option (google.api.http) = { get: "/vc/api/v1/dictionary/categories" };
  }
  // Метод получения справочника тарифов.
  // Метод доступен для: admin, service, bti, owner, employee
  rpc GetDictionaryTariffs ( GetDictionaryTariffsRequest ) returns ( GetDictionaryTariffsResponse ) {
    option (google.api.http) = { get: "/vc/api/v1/dictionary/tariffs" };
  }
  // Метод получения справочника ролей.
  // Метод доступен для: admin, service, bti, owner, employee
  rpc GetDictionaryRoles ( GetDictionaryRolesRequest ) returns ( GetDictionaryRolesResponse ) {
    option (google.api.http) = { get: "/vc/api/v1/dictionary/roles" };
  }
}

// Категория
message Category {
    // Идентификатор
    int32 id = 1;
    // Наименование
    string title = 2;
    // Тип
    string kind = 3;
}

// Тариф
message Tariff {
    // Идентификатор
    int32 id = 1;
    // Наименование
    string title = 2;
    // Параметр slug
    string slug = 3;
    // Тип статуса
    string status_kind = 4;
    // Дата действия от.
    // # Тип: DateTime
    google.protobuf.Timestamp from_at = 5;
    // Дата действия до.
    // # Тип: DateTime
    google.protobuf.Timestamp to_at = 6;
}

// Роль
message Role {
    // Идентификатор
    int32 id = 1;
    // Наименование
    string title = 2;
    // Доступы
    repeated string permissions = 3;
    // Является ли роль глобальной
    bool is_global = 4;
}

// Запрос на получение справочника категорий
message GetDictionaryCategoriesRequest {}

// Ответ на запрос получения справочника категорий
message GetDictionaryCategoriesResponse {
  // Список категорий
  message CameraCategories {
    // Категория
    repeated Category category = 1;
  }
  // Ошибка запроса
  message Error {
    // Причина ошибки
    oneof reason {
      // Ошибка VCfront
      VcDictionaryError vc_dictionary_error = 1;
    }
  }
  // Тип ответа
  oneof type {
    // Список категорий
    CameraCategories data = 1;
    // Ошибка
    Error error = 2;
  }
}

// Запрос на получение справочника тарифов
message GetDictionaryTariffsRequest {}

// Ответ на запрос получения справочника тарифов
message GetDictionaryTariffsResponse {
  // Список тарифов
  message CameraTariffs {
    // Тариф
    repeated Tariff tariff = 1;
  }
  // Ошибка запроса
  message Error {
    // Причина ошибки
    oneof reason {
      // Ошибка VCfront
      VcDictionaryError vc_dictionary_error = 1;
    }
  }
  // Тип ответа
  oneof type {
    // Список тарифов
    CameraTariffs data = 1;
    // Ошибка
    Error error = 2;
  }
}

// Запрос на получение справочника ролей
message GetDictionaryRolesRequest {}

// Ответ на запрос получения справочника ролей
message GetDictionaryRolesResponse {
  // Список ролей
  message Roles {
    // Роли
    repeated Role roles = 1;
  }
  // Ошибка запроса
  message Error {
    // Причина ошибки
    oneof reason {
      // Ошибка VCfront
      VcDictionaryError vc_dictionary_error = 1;
    }
  }
  // Тип ответа
  oneof type {
    // Список ролей
    Roles data = 1;
    // Ошибка
    Error error = 2;
  }
}

// Ошибка VCfront
message VcDictionaryError {
    // Причина
    message Reason {
        // Сообщение
        string message = 1;
    }
    // Сервис
    string service = 1;
    // Продукт
    string product = 2;
    // Сообщение
    string message = 3;
    // Причины
    repeated Reason reasons = 4;
}
