import { FilterArguments } from "./filter";
export declare enum Op {
    SUM = "SUM",
    AVG = "AVG",
    STDDEV = "STDDEV",
    KURT = "KURT",
    SKEW = "SKEW",
    VAR = "VAR"
}
export declare enum Grouping {
    BY = "BY",
    ROLLUP = "ROLLUP",
    SETS = "SETS"
}
export declare enum OrderDirection {
    ASC = "ASC",
    DESC = "DESC"
}
export declare class TimeRange {
    from: Date;
    to: Date;
}
export declare class Options<S extends string | symbol = string, F extends string | symbol = string, G extends string | symbol = string, O extends string | symbol = string> {
    grouping: Grouping;
    selects: Partial<Record<S, Array<{
        op: Op;
    }>>>;
    filters?: Partial<Record<F, FilterArguments>>;
    partitionFilters?: Partial<Record<F, FilterArguments>>;
    timeRange: TimeRange;
    groupBy?: Array<G>;
    partitionGroupBy?: Array<G>;
    orderBy?: {
        field: O;
        op: Op;
        dir: OrderDirection;
    };
    seriesBucketSize?: string;
    partition: string;
    limit?: number;
    retrospective?: boolean;
}
export declare class OptionsCurrency<S extends string | symbol = string, F extends string | symbol = string, G extends string | symbol = string, O extends string | symbol = string> extends Options<S, F, G, O> {
    currency: string;
}
export declare class OptionsWithBreakdown<S extends string | symbol = string, F extends string | symbol = string, G extends string | symbol = string, O extends string | symbol = string> extends OptionsCurrency<S, F, G, O> {
    breakdown?: boolean;
    selects: Partial<Record<S, Array<{
        op: Op;
        breakdown?: boolean;
    }>>>;
}
