import { Query } from '@vizzly/sqlbuilder-public';
import { QueryAttributes } from '../../../../shared-logic/src/QueryAttributes/types';
export declare enum PropertyType {
    Operator = "operator",
    IfLogic = "ifLogic",
    NumberInput = "number",
    Variable = "variable",
    Field = "field",
    Aggregate = "aggregate"
}
export declare enum OperatorType {
    Divide = "/",
    Multiply = "*",
    Subtract = "-",
    Add = "+"
}
export declare type NumberInput = {
    type: PropertyType.NumberInput;
    value: number | undefined;
};
export declare type Variable = {
    type: PropertyType.Variable;
    value: string;
};
export declare type Field = {
    type: PropertyType.Field;
    fieldId: string;
    function: string;
};
export declare type Aggregate = {
    type: PropertyType.Aggregate;
    fieldId: string;
    function?: string;
};
export declare type IfLogic = {
    type: PropertyType.IfLogic;
    cases: Array<{
        filter: Array<QueryAttributes.Filter[]>;
        returns: Operator | NumberInput | Field | Variable | IfLogic | Aggregate | undefined;
    }>;
    else: Operator | NumberInput | Field | Variable | IfLogic | undefined | Aggregate;
};
export declare type Operator = {
    type: PropertyType.Operator;
    op: OperatorType;
    values: Array<Operator | NumberInput | Field | Variable | IfLogic | Aggregate>;
};
export declare type Metric = Operator | IfLogic | Aggregate | NumberInput | Field;
export declare type BuildFieldCallback = (measureAttribute: QueryAttributes.Measure) => Query['measure'][number];
