syntax = "proto3";

package teaclave_frontend_service_proto;

import "teaclave_common.proto";

message RegisterInputFileRequest {
  string url = 1;
  string cmac = 2;
  teaclave_common_proto.FileCryptoInfo crypto_info = 3;
}

message RegisterInputFileResponse {
  string data_id = 1;
}

message RegisterOutputFileRequest {
  string url = 1;
  teaclave_common_proto.FileCryptoInfo crypto_info = 2;
}

message RegisterOutputFileResponse {
  string data_id = 1;
}

message RegisterFusionOutputRequest {
  repeated string owner_list = 1;
}

message RegisterFusionOutputResponse {
  string data_id = 1;
}

message RegisterInputFromOutputRequest {
  string data_id = 1;
}

message RegisterInputFromOutputResponse {
  string data_id = 1;
}

message GetOutputFileRequest {
  string data_id = 1;
}

message GetOutputFileResponse {
  repeated string owner = 1;
  string cmac = 2;
}

message GetInputFileRequest {
  string data_id = 1;
}

message GetInputFileResponse {
  repeated string owner = 1;
  string cmac = 2;
}

message FunctionInput {
  string name = 1;
  string description = 2;
}

message FunctionOutput {
  string name = 1;
  string description = 2;
}

message OwnerList {
  string data_name = 1;
  repeated string uids = 2;
}

message RegisterFunctionRequest {
  string name = 1;
  string description = 2;
  string executor_type = 3;
  bool public = 4;
  bytes payload = 5;
  repeated string arguments = 6;
  repeated FunctionInput inputs = 10;
  repeated FunctionOutput outputs = 11;
}

message RegisterFunctionResponse {
  string function_id = 1;
}

message GetFunctionRequest {
  string function_id = 1;
}

message GetFunctionResponse {
  string name = 1;
  string description = 2;
  string executor_type = 3;
  string owner = 4;
  bytes payload = 5;
  bool public = 6;
  repeated string arguments = 7;
  repeated FunctionInput inputs = 10;
  repeated FunctionOutput outputs = 11;
}

message DataMap {
  string data_name = 1;
  string data_id = 2;
}

message CreateTaskRequest {
  string function_id = 1;
  string function_arguments = 2;
  string executor = 3;
  repeated OwnerList inputs_ownership = 10;
  repeated OwnerList outputs_ownership= 11;
}

message CreateTaskResponse {
  string task_id = 1;
}

message GetTaskRequest {
  string task_id = 1;
}

message GetTaskResponse {
  string task_id = 1;
  string creator = 2;
  string function_id = 3;
  string function_owner = 4;
  string function_arguments = 5;
  repeated OwnerList inputs_ownership = 6;
  repeated OwnerList outputs_ownership = 7;
  repeated string participants = 8;
  repeated string approved_users = 9;
  repeated DataMap assigned_inputs = 10;
  repeated DataMap assigned_outputs = 11;
  teaclave_common_proto.TaskStatus status = 20;
  teaclave_common_proto.TaskResult result = 21;
}

message AssignDataRequest {
  string task_id = 1;
  repeated DataMap inputs = 2;
  repeated DataMap outputs = 3;
}

message AssignDataResponse { }

message ApproveTaskRequest {
  string task_id = 1;
}

message ApproveTaskResponse { }

message InvokeTaskRequest {
  string task_id = 1;
}

message InvokeTaskResponse { }

service TeaclaveFrontend {
  rpc RegisterInputFile (RegisterInputFileRequest) returns (RegisterInputFileResponse);
  rpc RegisterOutputFile (RegisterOutputFileRequest) returns (RegisterOutputFileResponse);
  rpc RegisterFusionOutput (RegisterFusionOutputRequest) returns (RegisterFusionOutputResponse);
  rpc RegisterInputFromOutput (RegisterInputFromOutputRequest) returns (RegisterInputFromOutputResponse);
  rpc GetOutputFile (GetOutputFileRequest) returns (GetOutputFileResponse);
  rpc GetInputFile (GetInputFileRequest) returns (GetInputFileResponse);
  rpc RegisterFunction (RegisterFunctionRequest) returns (RegisterFunctionResponse);
  rpc GetFunction (GetFunctionRequest) returns (GetFunctionResponse);
  rpc CreateTask (CreateTaskRequest) returns (CreateTaskResponse);
  rpc GetTask (GetTaskRequest) returns (GetTaskResponse);
  rpc AssignData (AssignDataRequest) returns (AssignDataResponse);
  rpc ApproveTask (ApproveTaskRequest) returns (ApproveTaskResponse);
  rpc InvokeTask (InvokeTaskRequest) returns (InvokeTaskResponse);

}
