import { ODataComparisonType, ODataFilterType, ODataLogicalOperationType } from "../odata-enums";
import { ODataLambdaConfig } from "../odata-lambda-config";
/**
 * Necessary data for constructing oData filter expressions.
 * @template T - Type of the value being filtered
 */
export interface BaseODataFilter<T = unknown> {
    /** OData filter operation type */
    type?: ODataFilterType;
    /** Comparison operation type */
    comparisonType?: ODataComparisonType;
    /**
     * Left side of the comparison expression.
     * Typically represents the property name or field path to filter on.
     * For many-to-many relations, uses format 'ManyToManyResource/property' (e.g., 'StudentCourse/courseId').
     */
    leftSide?: string;
    /**
     * Right side value for comparison.
     * For array operations, this can be an array of values.
     */
    rightSide?: T | unknown;
    /**
     * Comparison operator that stands between leftSide and rightSide in the query expression.
     */
    operator?: string;
    /**
     * Logical operation type for setting operations between filters.
     * Defines how the current filter will be combined with previous filters.
     * Possible values {@link oDataLogicalOperationTypes.and} or {@link oDataLogicalOperationTypes.or}.
     * Processing order is left to right, 'and' has higher priority than 'or' (groups by 'and' first, then by 'or').
     */
    logicalOperationType?: ODataLogicalOperationType;
    /** Configuration for lambda expressions */
    lambdaConfig?: ODataLambdaConfig;
}
export interface RelatedFilter {
    type?: ODataFilterType;
    comparisonType?: ODataComparisonType;
    rightSide?: string[];
    operator?: string;
    relatedTableName?: string;
    relatedFieldName?: string;
    logicalOperationType?: ODataLogicalOperationType;
}
