syntax = "proto3";

package armonik.api.grpc.v1.agent;

import "agent_common.proto";

option csharp_namespace = "ArmoniK.Api.gRPC.V1.Agent";

service Agent {
  rpc CreateTask(stream CreateTaskRequest) returns (CreateTaskReply);

  /**
   * Create the metadata of multiple results at once
   * Data have to be uploaded separately
   */
  rpc CreateResultsMetaData(CreateResultsMetaDataRequest) returns (CreateResultsMetaDataResponse) {}

  /**
    * Create one result with data included in the request
    */
  rpc CreateResults(CreateResultsRequest) returns (CreateResultsResponse) {}

  /**
    * Notify Agent that a data file representing the Result to upload is available in the shared folder
    * The name of the file should be the result id
    * Blocks until data are stored in Object Storage
    */
  rpc NotifyResultData(NotifyResultDataRequest) returns (NotifyResultDataResponse) {}

  /**
   * Create tasks metadata and submit task for processing.
   */
  rpc SubmitTasks(SubmitTasksRequest) returns (SubmitTasksResponse) {}

  /**
    * Retrieve Resource Data from the Agent
    * Data is stored in the shared folder between Agent and Worker as a file with the result id as name
    * Blocks until data are available in the shared folder
    */
  rpc GetResourceData(DataRequest) returns (DataResponse);

  /**
    * Retrieve Resource Data from the Agent
    * Data is stored in the shared folder between Agent and Worker as a file with the result id as name
    * Blocks until data are available in the shared folder
    */
  rpc GetCommonData(DataRequest) returns (DataResponse);

  /**
    * Retrieve Resource Data from the Agent
    * Data is stored in the shared folder between Agent and Worker as a file with the result id as name
    * Blocks until data are available in the shared folder
    */
  rpc GetDirectData(DataRequest) returns (DataResponse);
}
