/*
  Сервис управления архивными минутками
*/
syntax = "proto3";

import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "google/protobuf/wrappers.proto";
import "keyapis/vc/v1/keyapis_vc_camera_v1.proto";

package keyapis.vc.v1;

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

// Сервис управления архивными минутками
service ArchiveMinutesService {
  // Метод получения архивных минуток для канала камеры компании.
  // Метод доступен для: admin, service, bti
  rpc GetArchiveMinutesCompanyCameraChannel (GetArchiveMinutesCompanyCameraChannelRequest) returns (GetArchiveMinutesCompanyCameraChannelResponse) {
    option (google.api.http) = {
      get: "/vc/api/v1/archive_minutes/company/{company_id}/camera/{camera_uid}/channel/{channel_uid}"
    };
  }

  // Метод получения информации об архивной минутке для канала камеры компании по метке времени.
  // Метод доступен для: admin, service, bti
  rpc GetArchiveMinutesCompanyCameraChannelTimestamp (GetArchiveMinutesCompanyCameraChannelTimestampRequest) returns (GetArchiveMinutesCompanyCameraChannelTimestampResponse) {
    option (google.api.http) = {
      get: "/vc/api/v1/archive_minutes/company/{company_id}/camera/{camera_uid}/channel/{channel_uid}/timestamp/{timestamp_value}"
    };
  }
}


// Интервал архивной минутки
message ArchiveMinuteInterval {
    // Начало минутки.
    // Дата в формате Unix.
    // Пример 1598269021.755
    double since_timestamp = 1;
    // Конец минутки.
    // Дата в формате Unix.
    // Пример 1598269021.755
    double till_timestamp = 2;
}

// Интервалы архивных минуток камеры
message CameraArchiveMinuteIntervals {
  // Доступные минутки
  repeated ArchiveMinuteInterval available = 1;
  // Замороженные минутки
  repeated ArchiveMinuteInterval frozen = 2;
}

// Информация об архивной минутке
message ArchiveMinute {
    // Идентификатор компании
    int32 company_id = 1;
    // Идентификатор камеры
    string camera_uid = 2;
    // Идентификатор канала
    string channel_uid = 3;
    // Границы архивной минутки
    ArchiveMinuteInterval data = 4;
    // Размер
    int32 size = 5;
    // Хэш md5
    string md5 = 6;
}

// Запрос получения архивных минуток для канала камеры компании
message GetArchiveMinutesCompanyCameraChannelRequest {
  // Идентификатор компании.
  // # Диапазон: 1..2147483647
  int32 company_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор камеры
  string camera_uid = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор канала
  string channel_uid = 3 [(google.api.field_behavior) = REQUIRED];
  // Начало промежутка минуток.
  // Дата в формате Unix.
  // Пример 1598269021.755.
  // # Не превышает: till_timestamp
  google.protobuf.DoubleValue since_timestamp = 4;
  // Конец промежутка минуток.
  // Дата в формате Unix.
  // Пример 1598269021.755
  google.protobuf.DoubleValue till_timestamp = 5;
}

// Ответ на запрос получения архивных минуток для канала камеры компании
message GetArchiveMinutesCompanyCameraChannelResponse {
  // Ошибка запроса
  message Error {
    // Причина ошибки
    oneof reason {
      // Ошибка валидации
      ValidationError validation = 1;
    }
  }

  // Тип результата
  oneof type {
    // Архивные минутки компании
    CameraArchiveMinuteIntervals data = 1;
    // Ошибка 
    Error error = 2;
  }
}

// Запрос получения информации об архивной минутке для канала камеры компании
message GetArchiveMinutesCompanyCameraChannelTimestampRequest {
  // Идентификатор компании.
  // # Диапазон: 1..2147483647
  int32 company_id = 1 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор камеры
  string camera_uid = 2 [(google.api.field_behavior) = REQUIRED];
  // Идентификатор канала
  string channel_uid = 3 [(google.api.field_behavior) = REQUIRED];
  // Метка времени архивной минутки.
  // Берется та минутка, которая попадает этой меткой времени в границы интервала архивной архивной минутки.
  // Дата в формате Unix.
  // Пример 1598269021
  int64 timestamp_value = 4 [(google.api.field_behavior) = REQUIRED];
}

// Ответ на запрос получения информации об архивной минутке для канала камеры компании
message GetArchiveMinutesCompanyCameraChannelTimestampResponse {
  // Ошибка запроса
  message Error {
    // Ошибка взаимодействия с сервисом vcfront
    message VcfrontServiceError {
      // Текст ошибки
      string text = 1;
    }
    // Причина ошибки
    oneof reason {
      // Ошибка валидации
      ValidationError validation = 1;
      // Ошибка взаимодействия с сервисом vcfront
      VcfrontServiceError vcfront_service_error = 2;
    }
  }
  // Тип результата
  oneof type {
    // Информация об архивной минутке
    ArchiveMinute data = 1;
    // Ошибка
    Error error = 2;
  }
}