import { AdaptableColumnPredicate } from '../../types';
import { AdaptablePredicateDef, AdaptablePredicate, PredicateDefHandlerContext, PredicateModuleScope } from '../AdaptableState/Common/AdaptablePredicate';
/**
 * Functions which manage the Predicate object in AdapTable
 */
export interface PredicateApi {
    /**
     * Returns all current Predicate Definitions
     */
    getPredicateDefs(): AdaptablePredicateDef[];
    /**
     * Returns Predicate Definitions provided by AdapTable
     */
    getSystemPredicateDefs(): AdaptablePredicateDef[];
    /**
     * Returns Predicate Definitions provided by AdapTable for given Module Scope
     * @param moduleScope Module Scope to use
     */
    getSystemPredicateDefsByModuleScope<PREDICATE_TYPE extends string = string>(moduleScope: PredicateModuleScope): AdaptablePredicateDef<PREDICATE_TYPE>[];
    /**
     * Returns Predicate Definitions provided by users
     */
    getCustomPredicateDefs(): AdaptablePredicateDef[];
    /**
     * Retrieves all Predicate Definitions for given Module Scope
     * @param moduleScope Module Scope to use
     */
    getPredicateDefsByModuleScope(moduleScope: PredicateModuleScope): AdaptablePredicateDef[];
    /**
     * Gets the Predicate Definition for a given Id
     * @param predicateId Id of Predicate Definition
     */
    getPredicateDefById(predicateId: string): AdaptablePredicateDef;
    /**
     * Gets Predicate Definition provided by AdapTable for given Id
     * @param predicateId predicateId to check
     */
    getSystemPredicateDefById(predicateId: string): AdaptablePredicateDef;
    /**
     * Gets Predicate Definition provided by users for given Id
     * @param predicateId predicateId to check
     */
    getCustomPredicateDefById(predicateId: string): AdaptablePredicateDef;
    /**
     * Stringifies a given Predicate Definition
     * @param predicate Predicate Definition to stringify
     */
    predicateToString(predicate: AdaptablePredicate): string;
    /**
     * Stringifies a list of Predicate Definitions, using the given logical operator (AND/OR)
     * @param predicates List of Predicate Definitions to stringify
     * @param logicalOperator Logical operator to use to join the stringified Predicates (default AND)
     */
    predicatesToString(predicates: AdaptablePredicate[], logicalOperator?: string): string;
    /**
     * Checks whether a given Predicate Definition is valid
     * @param predicate Predicate Definition to check
     */
    isValidPredicate(predicate: AdaptablePredicate): boolean;
    /**
     * Checks if all predicates are valid
     * @param predicates Predicates Definitions to check
     */
    isEveryPredicateValid(predicates: AdaptablePredicate[]): boolean;
    /**
     * Same has handle predicate but it tales into account predicate column id.
     *
     * @param predicate
     * @param params
     * @param defaultReturn
     */
    handleColumnPredicate(predicate: AdaptableColumnPredicate, params: Omit<PredicateDefHandlerContext, 'adaptableApi' | 'inputs'>, defaultReturn: boolean): boolean;
    /**
     * Same has handle predicates but it tales into account predicate column id.
     *
     * @param predicate
     * @param params
     * @param defaultReturn
     */
    handleColumnPredicates(predicate: AdaptableColumnPredicate[], params: Omit<PredicateDefHandlerContext, 'adaptableApi' | 'inputs'>, defaultReturn: boolean): boolean;
    /**
     * Main Handler function for a Predicate Definition - used by AdapTableQL
     * @param predicate Predicate to handle
     * @param params Additional inputs as required
     * @param defaultReturn Whether to return the default
     */
    handlePredicate(predicate: AdaptablePredicate | undefined, params: Omit<PredicateDefHandlerContext, 'adaptableApi' | 'inputs'>, defaultReturn: boolean): boolean;
    /**
     * Handle and compose (with AND) the given Predicate Definitions
     * @param predicate Predicate to handle
     * @param params Additional inputs as required
     * @param defaultReturn Whether to return the default
     */
    handlePredicates(predicates: AdaptablePredicate[], params: Omit<PredicateDefHandlerContext, 'adaptableApi' | 'inputs'>, defaultReturn: boolean): boolean;
    /**
     * Whether Predicates are evaluated using Case Sensitivity
     */
    useCaseSensitivity(columnId: string): boolean;
}
