syntax = "proto3";
package qkd_app;

import "context.proto";

// Optare: Change this if you want to change App's structure or enums. 
// Optare: If a message (structure) is changed it must be changed in src/app/service/database

enum QKDAppStatusEnum {
  QKDAPPSTATUS_ON = 0;
  QKDAPPSTATUS_DISCONNECTED = 1;
  QKDAPPSTATUS_OUT_OF_TIME = 2;
  QKDAPPSTATUS_ZOMBIE = 3;
}

enum QKDAppTypesEnum {
  QKDAPPTYPES_INTERNAL = 0;
  QKDAPPTYPES_CLIENT = 1;
}

message QKDLId {
  context.Uuid qkdl_uuid = 1;
}


message App {
  AppId app_id = 1;
  QKDAppStatusEnum app_status = 2;
  QKDAppTypesEnum app_type = 3;
  string server_app_id = 4;
  repeated string client_app_id = 5;
  repeated QKDLId backing_qkdl_id = 6;
  context.DeviceId local_device_id = 7;
  context.DeviceId remote_device_id = 8;
}


message AppId {
  context.ContextId context_id = 1;
  context.Uuid app_uuid = 2;
}


service AppService {
  rpc RegisterApp(App) returns (context.Empty) {}
  rpc ListApps       (context.ContextId     ) returns (       AppList     ) {}
 }
 


 message AppList {
  repeated App apps = 1;
}
