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

import "google/api/annotations.proto";
import "protoc-gen-openapiv2/options/annotations.proto";

package deviceapis.device.v1;

option java_package = "ru.deviceapis.device.v1";
option java_outer_classname = "DeviceapisDeviceV1Proto";
option java_multiple_files = false;
option java_string_check_utf8 = true;
option go_package = "/deviceapis_device_v1";
option cc_enable_arenas = true;
option csharp_namespace = "Deviceapis.Device.V1";
option objc_class_prefix = "DEVICEAPISDEVICEV1";
option php_namespace = "Deviceapis\\Device\\V1";
option ruby_package = "Deviceapis::Device::V1";
option optimize_for = LITE_RUNTIME;

// Сервис управления системными настройками устройства
service SystemService {
  // Метод удаленной перезагрузки
  rpc PostSystemReboot(PostSystemRebootRequest) returns (PostSystemRebootResponse) {
    option (google.api.http) = {
      post: "/device/api/v1/system/reboot"
      body: "*"
    };
  }
  // Метод получения общей информации об устройстве
  rpc GetSystemInfo(GetSystemInfoRequest) returns (GetSystemInfoResponse) {
    option (google.api.http) = {
      get: "/device/api/v1/system/info"
    };
  }
}

// Запрос удаленной перезагрузки
message PostSystemRebootRequest {}

// Ответ на запрос удаленной перезагрузки
message PostSystemRebootResponse {}

// Общая информация об устройстве
message DeviceInfo {
  // Версия программного обеспечения
  string firmware_version = 1 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"3.5.0.0.1.27.29\""
  }
  ];
  // Версия аппаратного обеспечения
  string hardware_version = 2 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"rev5.5.6.1.2\""
  }
  ];
  // Модель
  string model = 3 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"Beward DS86017CP\""
  }
  ];
  // MAC-адрес.
  // Диапазон: 17..17.
  // Паттерн: /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/
  string mac_address = 4 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"00:1b:63:84:45:e6\"",
    pattern: "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$",
  }
  ];
  // IP адрес.
  // Диапазон: 7..15.
  // Паттерн: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
  string ip = 5 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"10.54.17.23\"",
    pattern: "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",
    min_length: 7,
    max_length: 15
  }
  ];
  // Серийный номер
  string serial_number = 6 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"0000145996\""
  }
  ];
  // Время работы в секундах.
  // Диапазон: 0..2147483647
  int32 uptime = 7 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "3600765",
    minimum: 0,
    maximum: 2147483647
  }
  ];
  // Версия программного обеспечения микроконтроллера
  string mc_firmware_version = 8 [(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
    example: "\"7.8.0.0.1.27.29\""
  }
  ];
}

// Запрос получения общей информации об устройстве
message GetSystemInfoRequest {}

// Ответ на запрос получения общей информации об устройстве
message GetSystemInfoResponse {
  // Тип ответа
  oneof type {
    // Общая информация об устройстве
    DeviceInfo data = 1;
  }
}
