import { AdaptablePredicateDefPartialWithExtends } from '../AdaptableState/Common/AdaptablePredicate';
import { AdaptablePredicateDef, ColumnScope, BaseContext, PredicateModuleScope, SystemAlertPredicateId, SystemAlertPredicateIds, SystemBadgeStylePredicateId, SystemBadgeStylePredicateIds, SystemFilterPredicateId, SystemFilterPredicateIds, SystemFlashingCellPredicateId, SystemFlashingCellPredicateIds, SystemFormatColumnPredicateId, SystemFormatColumnPredicateIds, AdaptableColumnContext } from '../types';
/**
 * Options for managing Adaptable Predicates using AdaptableQL
 */
export interface PredicateOptions {
    /**
     * Definitions for Custom provided Predicates
     */
    customPredicateDefs?: (AdaptablePredicateDef | AdaptablePredicateDefPartialWithExtends)[];
    /**
     * Which System Predicates are available when Filtering
     */
    systemFilterPredicates?: SystemFilterPredicateIds | ((context: SystemPredicatesContext<SystemFilterPredicateId>) => SystemFilterPredicateIds);
    /**
     * Which System Predicates are available for Badge Styles
     */
    systemBadgeStylePredicates?: SystemBadgeStylePredicateIds | ((context: SystemPredicatesContext<SystemBadgeStylePredicateId>) => SystemBadgeStylePredicateIds);
    /**
     * Which System Predicates are available in Alert Module
     */
    systemAlertPredicates?: SystemAlertPredicateIds | ((context: SystemPredicatesContext<SystemAlertPredicateId>) => SystemAlertPredicateIds);
    /**
     * Which System Predicates are available in Format Column Module
     */
    systemFormatColumnPredicates?: SystemFormatColumnPredicateIds | ((context: SystemPredicatesContext<SystemFormatColumnPredicateId>) => SystemFormatColumnPredicateIds);
    /**
     * Which System Predicates are available in Flashing Cell Module
     */
    systemFlashingCellPredicates?: SystemFlashingCellPredicateIds | ((context: SystemPredicatesContext<SystemFlashingCellPredicateId>) => SystemFlashingCellPredicateIds);
    /**
     * Perform case-sensitive text comparisons when evaluating Predicates
     *
     * @defaultValue false
     * @gridInfoItem
     * @noCodeItem
     */
    caseSensitivePredicates?: boolean | ((context: AdaptableColumnContext) => boolean);
    /**
     *
     * Should In Predicate evaluate using datetime, rather than date (the default)
     * @defaultValue  false
     * @noCodeItem
     */
    evaluateInPredicateUsingTime?: boolean | ((context: AdaptableColumnContext) => boolean);
}
/**
 * Context used for setting which System Predicates are available
 */
export interface SystemPredicatesContext<PREDICATE_TYPE = string> extends BaseContext {
    /**
     * AdapTable-provided System Predicate Definitions
     */
    systemPredicateDefs: AdaptablePredicateDef<PREDICATE_TYPE>[];
    /**
     * Module for which Predicates are being retrieved
     */
    moduleScope: PredicateModuleScope;
    /**
     * Current Scope where Predicates are being used
     */
    columnScope: ColumnScope;
}
