syntax = "proto3";

package retrom;

import "google/protobuf/timestamp.proto";

enum SaveStrategy {
  SINGLE_FILE = 0;
  FILE_SYSTEM_DIRECTORY = 1;
  DISK_IMAGE = 2;
}

message Emulator {
  int32 id = 1;
  repeated int32 supported_platforms = 2;
  string name = 3;
  SaveStrategy save_strategy = 4;
  google.protobuf.Timestamp created_at = 5;
  google.protobuf.Timestamp updated_at = 6;
}

message NewEmulator {
  repeated int32 supported_platforms = 1;
  string name = 2;
  SaveStrategy save_strategy = 3;
  optional google.protobuf.Timestamp created_at = 4;
  optional google.protobuf.Timestamp updated_at = 5;
}

message UpdatedEmulator {
  int32 id = 1;
  repeated int32 supported_platforms = 2;
  optional string name = 3;
  optional SaveStrategy save_strategy = 4;
  optional google.protobuf.Timestamp created_at = 5;
  optional google.protobuf.Timestamp updated_at = 6;
}

message EmulatorProfile {
  int32 id = 1;
  int32 emulator_id = 2;
  string name = 3;
  repeated string supported_extensions = 4;
  repeated string custom_args = 5;
  google.protobuf.Timestamp created_at = 6;
  google.protobuf.Timestamp updated_at = 7;
}

message NewEmulatorProfile {
  int32 emulator_id = 1;
  string name = 2;
  repeated string supported_extensions = 3;
  repeated string custom_args = 4;
  optional google.protobuf.Timestamp created_at = 5;
  optional google.protobuf.Timestamp updated_at = 6;
}

message UpdatedEmulatorProfile {
  int32 id = 1;
  optional int32 emulator_id = 2;
  optional string name = 3;
  repeated string supported_extensions = 4;
  repeated string custom_args = 5;
  optional google.protobuf.Timestamp created_at = 6;
  optional google.protobuf.Timestamp updated_at = 7;
}

message DefaultEmulatorProfile {
  int32 platform_id = 1;
  int32 emulator_profile_id = 2;
  google.protobuf.Timestamp created_at = 3;
  google.protobuf.Timestamp updated_at = 4;
  int32 client_id = 5;
}

message NewDefaultEmulatorProfile {
  int32 platform_id = 1;
  int32 emulator_profile_id = 2;
  optional google.protobuf.Timestamp created_at = 3;
  optional google.protobuf.Timestamp updated_at = 4;
  optional int32 client_id = 5;
}

message UpdatedDefaultEmulatorProfile {
  int32 platform_id = 1;
  int32 emulator_profile_id = 2;
  optional google.protobuf.Timestamp created_at = 3;
  optional google.protobuf.Timestamp updated_at = 4;
  optional int32 client_id = 5;
}

message LocalEmulatorConfig {
  int32 id = 1;
  int32 emulator_id = 2;
  int32 client_id = 3;
  google.protobuf.Timestamp created_at = 4;
  google.protobuf.Timestamp updated_at = 5;
  string executable_path = 6;
  optional string nickname = 7;
}

message NewLocalEmulatorConfig {
  int32 emulator_id = 1;
  int32 client_id = 2;
  optional google.protobuf.Timestamp created_at = 3;
  optional google.protobuf.Timestamp updated_at = 4;
  string executable_path = 5;
  optional string nickname = 6;
}

message UpdatedLocalEmulatorConfig {
  int32 id = 1;
  optional int32 emulator_id = 2;
  optional int32 client_id = 3;
  optional google.protobuf.Timestamp created_at = 4;
  optional google.protobuf.Timestamp updated_at = 5;
  optional string executable_path = 6;
  optional string nickname = 7;
}
