syntax = "proto3";

package armonik.api.grpc.v1.submitter;

import "objects.proto";
import "submitter_common.proto";

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

service Submitter {
  rpc GetServiceConfiguration(Empty) returns (Configuration) {
    option deprecated = true;
  }

  rpc CreateSession(CreateSessionRequest) returns (CreateSessionReply) {
    option deprecated = true;
  }
  rpc CancelSession(Session) returns (Empty) {
    option deprecated = true;
  }

  rpc CreateSmallTasks(CreateSmallTaskRequest) returns (CreateTaskReply) {
    option deprecated = true;
  }
  rpc CreateLargeTasks(stream CreateLargeTaskRequest) returns (CreateTaskReply) {
    option deprecated = true;
  }

  rpc ListTasks(TaskFilter) returns (TaskIdList) {
    option deprecated = true;
  }
  rpc ListSessions(SessionFilter) returns (SessionIdList) {
    option deprecated = true;
  }

  rpc CountTasks(TaskFilter) returns (Count) {
    option deprecated = true;
  }
  rpc TryGetResultStream(ResultRequest) returns (stream ResultReply) {
    option deprecated = true;
  }
  rpc TryGetTaskOutput(TaskOutputRequest) returns (Output) {
    option deprecated = true;
  }
  rpc WaitForAvailability(ResultRequest) returns (AvailabilityReply) {
    option deprecated = true;
  }
  rpc WaitForCompletion(WaitRequest) returns (Count) {
    option deprecated = true;
  }
  rpc CancelTasks(TaskFilter) returns (Empty) {
    option deprecated = true;
  }
  rpc GetTaskStatus(GetTaskStatusRequest) returns (GetTaskStatusReply) {
    option deprecated = true;
  }
  rpc GetResultStatus(GetResultStatusRequest) returns (GetResultStatusReply) {
    option deprecated = true;
  }

  /**
	 * This endpoint allows a user to watch a list of results and be notified when there is any change.
	 * The user sends the list of ids they want to watch.
	 * The submitter will then send the statuses for all requested ids immediately and keep the stream open.
	 *   Ids not present in DB will be returned at that time with the special state NOTFOUND.
	 * The submitter will send updates to the client via the opened stream.
	 * Any reply can be implicitely chunked if there are too many event to report at the same time (or for the first reply).
	 * It is possible to filter out specific statuses from events.
	 */
  rpc WatchResults(stream WatchResultRequest) returns (stream WatchResultStream) {
    option deprecated = true;
  }
}
