syntax = "proto2";

package jp.co.cyberagent.stf.proto;

option java_outer_classname = "Wire";

enum MessageType {
    DO_IDENTIFY = 1;
    DO_KEYEVENT = 2;
    DO_TYPE = 3;
    DO_WAKE = 4;
    DO_ADD_ACCOUNT_MENU = 24;
    DO_REMOVE_ACCOUNT = 20;
    GET_ACCOUNTS = 26;
    GET_BROWSERS = 5;
    GET_CLIPBOARD = 6;
    GET_DISPLAY = 19;
    GET_PROPERTIES = 7;
    GET_RINGER_MODE = 27;
    GET_SD_STATUS = 25;
    GET_VERSION = 8;
    GET_WIFI_STATUS = 23;
    SET_CLIPBOARD = 9;
    SET_KEYGUARD_STATE = 10;
    SET_RINGER_MODE = 21;
    SET_ROTATION = 12;
    SET_WAKE_LOCK = 11;
    SET_WIFI_ENABLED = 22;
    SET_MASTER_MUTE = 28;
    EVENT_AIRPLANE_MODE = 13;
    EVENT_BATTERY = 14;
    EVENT_CONNECTIVITY = 15;
    EVENT_PHONE_STATE = 16;
    EVENT_ROTATION = 17;
    EVENT_BROWSER_PACKAGE = 18;
}

message Envelope {
    optional uint32 id = 1;
    required MessageType type = 2;
    required bytes message = 3;
}

// Events

message AirplaneModeEvent {
    required bool enabled = 1;
}

message BatteryEvent {
    required string status = 1;
    required string health = 2;
    required string source = 3;
    required uint32 level = 4;
    required uint32 scale = 5;
    required double temp = 6;
    required double voltage = 7;
}

message BrowserApp {
    required string name = 1;
    required string component = 2;
    required bool selected = 3;
    required bool system = 4;
}

message BrowserPackageEvent {
    required bool selected = 1;
    repeated BrowserApp apps = 2;
}

message ConnectivityEvent {
    required bool connected = 1;
    optional string type = 2;
    optional string subtype = 3;
    optional bool failover = 4;
    optional bool roaming = 5;
}

message PhoneStateEvent {
    required string state = 1;
    required bool manual = 2;
    optional string operator = 3;
}

message RotationEvent {
    required int32 rotation = 1;
}

// Service

message GetVersionRequest {
}

message GetVersionResponse {
    required bool success = 1;
    optional string version = 2;
}

message SetKeyguardStateRequest {
    required bool enabled = 1;
}

message SetKeyguardStateResponse {
    required bool success = 1;
}

message SetWakeLockRequest {
    required bool enabled = 1;
}

message SetWakeLockResponse {
    required bool success = 1;
}

enum ClipboardType {
    TEXT = 1;
}

message SetClipboardRequest {
    required ClipboardType type = 1;
    optional string text = 2;
}

message SetClipboardResponse {
    required bool success = 1;
}

message GetClipboardRequest {
    required ClipboardType type = 1;
}

message GetClipboardResponse {
    required bool success = 1;
    optional ClipboardType type = 2;
    optional string text = 3;
}

message GetBrowsersRequest {
}

message GetBrowsersResponse {
    required bool success = 1;
    required bool selected = 2;
    repeated BrowserApp apps = 3;
}

message GetDisplayRequest {
    required int32 id = 1;
}

message GetDisplayResponse {
    required bool success = 1;
    optional int32 width = 2;
    optional int32 height = 3;
    optional float xdpi = 4;
    optional float ydpi = 5;
    optional float fps = 6;
    optional float density = 7;
    optional int32 rotation = 8;
    optional bool secure = 9;
}

message Property {
    required string name = 1;
    required string value = 2;
}

message GetPropertiesRequest {
    repeated string properties = 1;
}

message GetPropertiesResponse {
    required bool success = 1;
    repeated Property properties = 2;
}

message DoIdentifyRequest {
    required string serial = 1;
}

message DoIdentifyResponse {
    required bool success = 1;
}

message GetAccountsRequest {
    optional string type = 1;
}

message GetAccountsResponse {
    required bool success = 1;
    repeated string accounts = 2;
}

message DoAddAccountMenuRequest {
}

message DoAddAccountMenuResponse {
    required bool success = 1;
}

message DoRemoveAccountRequest {
    required string type = 1;
    optional string account = 2;
}

message DoRemoveAccountResponse {
    required bool success = 1;
}

enum RingerMode {
    SILENT = 0;
    VIBRATE = 1;
    NORMAL = 2;
}

message SetRingerModeRequest {
    required RingerMode mode = 1;
}

message SetRingerModeResponse {
    required bool success = 1;
}

message GetRingerModeRequest {
}

message GetRingerModeResponse {
    required bool success = 1;
    required RingerMode mode = 2;
}

message SetWifiEnabledRequest {
    required bool enabled = 1;
}

message SetWifiEnabledResponse {
    required bool success = 1;
}

message GetWifiStatusRequest {
}

message GetWifiStatusResponse {
    required bool success = 1;
    required bool status = 2;
}

message GetSdStatusRequest {
}

message GetSdStatusResponse {
    required bool success = 1;
    required bool mounted = 2;
}

message SetMasterMuteRequest {
    required bool enabled = 1;
}

message SetMasterMuteResponse {
    required bool success = 1;
}

// Agent

enum KeyEvent {
    DOWN = 0;
    UP = 1;
    PRESS = 2;
}

message KeyEventRequest {
    required KeyEvent event = 1;
    required int32 keyCode = 2;
    optional bool shiftKey = 3;
    optional bool ctrlKey = 4;
    optional bool altKey = 5;
    optional bool metaKey = 6;
    optional bool symKey = 7;
    optional bool functionKey = 8;
    optional bool capsLockKey = 9;
    optional bool scrollLockKey = 10;
    optional bool numLockKey = 11;
}

message DoTypeRequest {
    required string text = 1;
}

message SetRotationRequest {
    required int32 rotation = 1;
    required bool lock = 2;
}

message DoWakeRequest {
}
