// Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";
package policy;

import "monitoring.proto"; // to be migrated to: "kpi_manager.proto"

// Condition
message PolicyRuleCondition {
  monitoring.KpiId    kpiId             = 1;  // to be migrated to: "kpi_manager.KpiId"
  NumericalOperator   numericalOperator = 2;
  monitoring.KpiValue kpiValue          = 3;
}

// Operator to be used when comparing Kpis with condition values
enum NumericalOperator {
  POLICYRULE_CONDITION_NUMERICAL_UNDEFINED = 0;          // Kpi numerical operator undefined
  POLICYRULE_CONDITION_NUMERICAL_EQUAL = 1;              // Kpi is equal with value
  POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL = 2;          // Kpi is not equal with value
  POLICYRULE_CONDITION_NUMERICAL_LESS_THAN = 3;          // Kpi is less than value
  POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL = 4;    // Kpi is less than or equal with value
  POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN = 5;       // Kpi is greater than value
  POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL = 6; // Kpi is less than or equal with value
}

// Operator to be used when evaluating each condition
enum BooleanOperator {
  POLICYRULE_CONDITION_BOOLEAN_UNDEFINED = 0;  // Boolean operator undefined
  POLICYRULE_CONDITION_BOOLEAN_AND = 1;        // Boolean AND operator
  POLICYRULE_CONDITION_BOOLEAN_OR = 2;         // Boolean OR operator
}