import { AdaptableModule } from '../AdaptableState/Common/Types';
import { AdaptableQuery } from '../AdaptableState/Common/AdaptableQuery';
import { AdaptableColumn } from '../AdaptableState/Common/AdaptableColumn';
/**
 * Functions related to Expressions in AdapTableQL (the Adaptable Query Language)
 */
export interface ExpressionApi {
    /**
     * Whether the given BooleanExpression is valid
     * @param expression query to Check
     * @param module module specific query
     * @param validationErrorMessage optional validation error message; if provided, the error will be logged
     */
    isValidBooleanExpression(expression: string, module: AdaptableModule, validationErrorMessage?: string): boolean;
    /**
     * Whether the given ObservableExpression is valid
     * @param expression - ObservableExpression to check
     * @param module - module specific query
     * @param validationErrorMessage - optional validation error message; if provided, the error will be logged
     */
    isValidObservableExpression(expression: string, module: AdaptableModule, validationErrorMessage?: string): boolean;
    /**
     * Whether the given AggregatedBooleanExpression is valid
     * @param expression -  AggregatedBooleanExpression to check
     * @param module - module specific query
     * @param validationErrorMessage - optional validation error message; if provided, the error will be logged
     */
    isValidAggregatedBooleanExpression(expression: string, module: AdaptableModule, validationErrorMessage?: string): boolean;
    /**
     * Whether the given AggregatedScalarExpression is valid
     * @param expression -  AggregatedScalarExpression to check
     * @param module - module specific query
     * @param validationErrorMessage - optional validation error message; if provided, the error will be logged
     */
    isValidAggregatedScalarExpression(expression: string, module: AdaptableModule, validationErrorMessage?: string): boolean;
    /**
     * Returns all Columns referenced in an Expression
     * @param expression - expression to check
     */
    getColumnsFromExpression(expression: string): string[];
    /**
     * Returns whether a Column is Queryable
     */
    isColumnQueryable(abColumn: AdaptableColumn): boolean;
    /**
     * Runs the AST that AdapTableQL creates for an Expression - useful when evaluating remotely
     * @param expression expression to be run
     */
    getASTForExpression(expression: string): any;
    /**
     * Returns Expression string of given AdaptableQuery: can be Boolean, AggregatedBoolean, Scalar, AggregatedScalar or Observable
     * @param query - the AdaptableQuery
     */
    getAdaptableQueryExpression(query: Partial<AdaptableQuery>): string | undefined;
    /**
     * Returns Expression string of given AdaptableQuery with column friendly names (instead of Column IDs)
     * @param query - the AdaptableQuery
     */
    getAdaptableQueryExpressionWithColumnFriendlyNames(query: Partial<AdaptableQuery>): string | undefined;
    /**
     * Whether Expressions are evaluated using Case Sensitivity
     */
    useCaseSensitivity(): boolean;
}
