/*
  Сервис реализует функционал взаимодействия с Умным домом Sber
*/
syntax = "proto3";

import "google/api/annotations.proto";

package keyapis.iot_connect_sber.v1;

option java_package = "ru.keyapis.iot_connect.v1";
option java_outer_classname = "KeyapisIotConnectV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/keyapis_iot_connect_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Keyapis.IotConnect.V1";
option objc_class_prefix = "KEYAPISIOTCONNECTV1";
option php_namespace = "Keyapis\\IotConnect\\V1";
option ruby_package = "Keyapis::IotConnect::V1";
option optimize_for = LITE_RUNTIME;

// Сервис для приема комманд от Умного дома Sber
service CommandService{
  // Метод приема команд на изменение состояния устройства.
  // Поддерживается только открытие домофона.
  // Метод доступен для: TokenACF: Scope: sber_iot
  rpc PostCommand(PostCommandRequest) returns (PostCommandResponse)
  {
    option (google.api.http) = {
      post: "/iot_connect_sber/api/v1/command"
      body: "*"
    };
  }
}

// Массив команд на изменение статуса устройства
message DeviceCommandArray {
  // Команды на изменение статуса устройства
  repeated DeviceCommand states = 1;
}

// Команды на изменение статуса устройства
message DeviceCommand {
  // Список ключей команд на изменение статуса устройства
  enum KeyType {
    // Значение не указано
    KEY_TYPE_UNKNOWN = 0;
    // Отклонение звонка
    REJECT_CALL = 1;
    // Открытие замка
    UNLOCK = 2;
  }
  // Значение команды на изменение статуса устройства
  message Value {
    // Тип значения команд на изменение статуса устройства
    enum Type {
      // Значение не указано
      TYPE_UNKNOWN = 0;
      // Перечисление
      ENUM = 1;
    }
    // Значения команд на изменение статуса устройства типа перечисление
    enum ValueEnumType {
      // Значение не указано
      VALUE_ENUM_TYPE_UNKNOWN = 0;
      // Отклонение звонка
      REJECT = 1;
      // Открытие замка
      UNLOCK = 2;
    }
    // Тип значения команды на изменение статуса устройства
    Type type = 1;
    // Значение команды на изменение статуса устройства
    oneof value {
      // Значения команды на изменение статуса устройства типа перечисление
      ValueEnumType value_enum_type = 2 [json_name = "enum_value"];
    }
  }
  // Тип команды на изменение статуса устройства
  KeyType command_key_type = 1 [json_name = "key"];
  // Значение команды на изменение статуса устройства
  Value value = 2;
}


// Запрос на изменение состояния устройства
message PostCommandRequest{
  // Массив домофонов со статусами
  map<string, DeviceCommandArray> devices = 1;
}

// Ответ на запрос на изменение состояния устройства
message PostCommandResponse{
}
