syntax = "proto3";

package armonik.api.grpc.v1;

import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";

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

enum FilterStringOperator {
  FILTER_STRING_OPERATOR_EQUAL = 0; /** Equal */
  FILTER_STRING_OPERATOR_NOT_EQUAL = 1; /** Not equal */
  FILTER_STRING_OPERATOR_CONTAINS = 2; /** Contains */
  FILTER_STRING_OPERATOR_NOT_CONTAINS = 3; /** Not contains */
  FILTER_STRING_OPERATOR_STARTS_WITH = 4; /** Starts with */
  FILTER_STRING_OPERATOR_ENDS_WITH = 5; /** Ends with */
}

message FilterString {
  string value = 1;
  FilterStringOperator operator = 2;
}

enum FilterNumberOperator {
  FILTER_NUMBER_OPERATOR_EQUAL = 0; /** Equal */
  FILTER_NUMBER_OPERATOR_NOT_EQUAL = 1; /** Not equal */
  FILTER_NUMBER_OPERATOR_LESS_THAN = 2; /** Less than */
  FILTER_NUMBER_OPERATOR_LESS_THAN_OR_EQUAL = 3; /** Less than or equal */
  FILTER_NUMBER_OPERATOR_GREATER_THAN_OR_EQUAL = 4; /** Greater than or equal */
  FILTER_NUMBER_OPERATOR_GREATER_THAN = 5; /** Greater than */
}

message FilterNumber {
  int64 value = 1;
  FilterNumberOperator operator = 2;
}

enum FilterDateOperator {
  FILTER_DATE_OPERATOR_EQUAL = 0; /** Equal */
  FILTER_DATE_OPERATOR_NOT_EQUAL = 1; /** Not equal */
  FILTER_DATE_OPERATOR_BEFORE = 2; /** Before */
  FILTER_DATE_OPERATOR_BEFORE_OR_EQUAL = 3; /** Before or equal */
  FILTER_DATE_OPERATOR_AFTER_OR_EQUAL = 4; /** After or equal */
  FILTER_DATE_OPERATOR_AFTER = 5; /** After */
}

message FilterDate {
  google.protobuf.Timestamp value = 1;
  FilterDateOperator operator = 2;
}

enum FilterArrayOperator {
  FILTER_ARRAY_OPERATOR_CONTAINS = 0; /** Contains */
  FILTER_ARRAY_OPERATOR_NOT_CONTAINS = 1; /** Not contains */
}

message FilterArray {
  string value = 1;
  FilterArrayOperator operator = 2;
}

enum FilterStatusOperator {
  FILTER_STATUS_OPERATOR_EQUAL = 0; /** Equal */
  FILTER_STATUS_OPERATOR_NOT_EQUAL = 1; /** Not equal */
}

enum FilterBooleanOperator {
  FILTER_BOOLEAN_OPERATOR_IS = 0; /** Is */
}

message FilterBoolean {
  bool value = 1;
  FilterBooleanOperator operator = 2;
}

enum FilterDurationOperator {
  FILTER_DURATION_OPERATOR_EQUAL = 0; /** Equal */
  FILTER_DURATION_OPERATOR_NOT_EQUAL = 1; /** Not equal */
  FILTER_DURATION_OPERATOR_SHORTER_THAN = 2; /** Shorter than */
  FILTER_DURATION_OPERATOR_SHORTER_THAN_OR_EQUAL = 3; /** Shorter than or equal */
  FILTER_DURATION_OPERATOR_LONGER_THAN_OR_EQUAL = 4; /** Longer than or equal */
  FILTER_DURATION_OPERATOR_LONGER_THAN = 5; /** Longer than */
}

message FilterDuration {
  google.protobuf.Duration value = 1;
  FilterDurationOperator operator = 2;
}
