export declare enum Unit {
    DAY = "day",
    MONTH = "month",
    WEEK = "week"
}
export declare enum PeriodGranularity {
    MINUTE = "minute",
    FIVE_MINUTE = "five_minute",
    HOUR = "hour",
    DAY = "day",
    WEEK = "week",
    MONTH = "month"
}
export declare enum PeriodTimeType {
    TIMESTAMP = "timestamp",
    PAST = "past"
}
export declare type Granularity = 'day' | 'hour' | 'month' | 'week' | 'five_minute';
export interface GroupByItem {
    property_name?: string;
    property_type?: string;
    number_group_type?: 1 | 0;
    distribution_interval?: number[];
    datetime_group_type?: 1 | 0;
    datetime_group_granularity?: string;
    property_compose_type?: any;
}
export interface PeriodAmountSpan {
    type: PeriodTimeType.PAST;
    past: {
        amount: number;
        unit: Granularity;
    };
}
export declare type PeriodDslSpan = PeriodAmountSpan | PeriodTimestampSpan;
/**
 * 后端需要的 dsl period type
 */
export declare const PERIOD_PAST_RANGE = "past_range";
export declare enum PeriodWeekendOption {
    /**
     * 不去除周末和节假日
     */
    ALL = 1,
    /**
     * 去除周末
     */
    EXCLUDE_WEEKEND = 2,
    /**
     * 去除周末和节假日
     */
    EXCLUDE_WEEKEND_AND_HOLIDAY = 4,
    /**
     * 去除非交易日（包含周末及节假日）
     */
    EXCLUDE_TRADING_HOLIDAY = 5
}
/**
 * 显微镜中用到的 dsl period type
 */
export declare const PERIOD_RANGE = "range";
export interface PeriodDsl {
    type: typeof PERIOD_PAST_RANGE | typeof PERIOD_RANGE;
    spans?: [PeriodDslSpan, PeriodDslSpan];
    timezone?: string;
    week_start?: number;
    granularity?: PeriodGranularity | 'all';
    align_unit?: PeriodGranularity;
    /**
     * 以下是对比时间相关
     */
    adjust_model?: string;
    base_period_index?: number;
    /**
     * 对比时间 - N 天前
     */
    relative_amount?: number;
    /**
     * 是否跳过此时间。
     * 如果跳过，返回值中对应的部分将全部是 0
     */
    skip_period?: boolean;
    weekendOption?: PeriodWeekendOption;
    weekend_option?: PeriodWeekendOption;
    interval?: string;
    /**
     * type为range类型时出现，用于显微镜中
     */
    range?: number[];
}
export interface PeriodTimestampSpan {
    type: PeriodTimeType.TIMESTAMP;
    timestamp: string;
}
export declare type Span = PeriodAmountSpan | PeriodTimestampSpan;
/**
 * 请求类型
 */
export declare enum EDSLType {
    EVENT = "event_analysis",
    RETENTION = "retention_analysis",
    FUNNEL = "funnel_analysis",
    PATHFIND = "pathfind_analysis",
    SOURCE = "source_analysis",
    WEB_SESSION = "web_session_analysis",
    LIFE_CYCLE = "lifecycle_analysis",
    COMPOSITION = "composition_analysis",
    DISTRIBUTE = "distribute_analysis",
    LTV = "ltv_analysis",
    ITEM = "items_analysis",
    SQL_QUERY = "custom_sql_query",
    ATTRIBUTION = "attribution_analysis",
    RICH_TEXT = "rich_text",
    IFRAME = "embed",
    EVENT_INDICATOR_ANALYSIS = "event_indicator_analysis"
}
export declare module DSL {
    type ContentQueryType = 'event' | 'session' | 'retention' | 'funnel' | 'path_find' | 'life_cycle' | 'ltv' | 'web_session' | 'mini_program' | 'funnel_cohort' | 'composition' | 'distribution_cohort' | 'item' | 'behavior_attribution' | '$cohort' | 'funnel_distribution_cohort' | 'funnel_distribution' | 'distribution' | 'event_cohort';
    type OrderDirection = 'asc' | 'desc';
    type Logic = 'and' | 'or';
    type PropertyType = 'user_profile' | 'profile' | 'event_param' | 'cohort' | 'item_param' | 'common_param';
    /**
     * 属性的特性
     */
    type PropertyComposeType = 'virtual' | 'origin';
    type PropertyOperation = '=' | '!=' | '>' | '<' | '>=' | '<=' | 'contain' | 'not_contain' | 'is_null' | 'is null' | 'is_not_null' | 'is not null' | 'in' | 'not_in' | 'between' | 'like' | 'not_like' | 'match' | 'time' | 'list_contain' | 'list_not_contain';
    type PropertyValueType = 'string' | 'int' | 'float' | 'bigint';
    type PeriodGranularity = Granularity | 'none' | 'all';
    type PeriodUnit = Unit;
    type PeriodType = 'last' | 'range' | 'today' | 'yesterday' | 'past_range';
    type PeriodLast = {
        amount: number;
        unit: PeriodUnit;
    };
    interface ObjectWithAny {
        [key: string]: any;
    }
    type PropertyPeriodUnitType = 'day' | 'second' | 'minute' | 'hour' | 'week';
    type PropertyPeriodSpan = {
        amount: number;
        unit: PropertyPeriodUnitType;
    };
    type PropertyPeriodReference = 'current_time' | 'current_event' | 'today';
    type PropertyPeriodType = 'range' | 'future_out' | 'future_in' | 'past_out' | 'past_in' | 'past_range' | 'future_range' | 'same_day' | 'same_week' | 'same_month' | 'past_range' | 'future_range';
    type PropertyPeriod = {
        reference?: PropertyPeriodReference;
        type: PropertyPeriodType;
        spans?: PropertyPeriodSpan[];
        time_stamps?: number[];
    };
    type IDsl = AnalysisDSL;
    interface SingleContentDsl<T = ContentQueriesItem> {
        version: number;
        app_ids?: Array<number>;
        /**
         * 分析的project id，数组类型保留扩展能力
         */
        project_ids?: Array<number>;
        periods: Array<PeriodDsl>;
        content: Content<T>;
        show_option?: ContentShowOption;
        use_app_cloud_id?: boolean;
        option?: any;
    }
    interface MultipleContentDsl<T = ContentQueriesItem> {
        version: number;
        app_ids: Array<number>;
        periods: Array<PeriodDsl>;
        contents: Array<Content<T>>;
        show_option: ContentShowOption;
        use_app_cloud_id?: boolean;
        option?: DSLOptions;
    }
    interface DSLOptions {
        blend: DSLOptionBlend;
    }
    interface DSLOptionBlend {
        status: boolean;
        base: number;
    }
    interface PeriodItem {
        granularity?: PeriodGranularity;
        interval?: string | number;
        range?: Array<number>;
        type?: PeriodType;
        last?: PeriodLast;
        realtime?: boolean;
        real_time?: boolean;
        week_start?: number;
        timezone?: string;
        align_unit?: string;
        spans?: Span[];
        /**
         * 对比时间的对齐方式
         */
        adjust_model?: string;
        /**
         * 向第几个时间对齐
         */
        base_period_index?: number;
        /**
         * 是否去除周末
         */
        weekendOption?: number;
    }
    interface Content<T = ContentQueriesItem> {
        query_type: ContentQueryType | string;
        profile_filters: Array<ContentFiltersItem>;
        profile_groups?: Array<string>;
        profile_groups_v2?: Array<GroupByItem>;
        orders?: Array<ContentOrderItem>;
        page?: ContentPage;
        option?: ContentOption;
        show_option?: ContentShowOption;
        queries: Array<Array<T>>;
    }
    interface ContentOrderItem {
        field?: string;
        direction?: OrderDirection;
    }
    interface ContentPage {
        limit: number;
        offset: number;
    }
    interface ContentOption {
        [key: string]: any;
        refresh_cache?: boolean;
        window_period?: number;
        window_period_type?: string;
        distribution_group?: number;
        distribution_step?: number;
        is_temp_cohort?: boolean;
    }
    type ContentShowOption = any;
    interface ContentFiltersItem {
        show_name?: string;
        show_label?: string | number;
        expression: ContentExpression;
        skip_dict?: boolean;
    }
    interface ContentQueriesItem {
        formula?: string;
        show_name?: string;
        show_label?: string;
        event_id?: string | number;
        event_name?: string;
        event_type?: string;
        event_indicator?: string;
        measure_info?: ContentQueriesMeasureInfo;
        filters?: Array<ContentFiltersItem>;
        groups_v2?: Array<GroupByItem>;
        type?: string;
        indicator_show_name?: string;
    }
    interface ContentComputeQueriesItem {
        show_name?: string;
        show_label?: string;
        formula: string;
    }
    interface ContentQueriesMeasureInfo {
        [key: string]: any;
        measure_type?: string;
        property_name?: string;
        measure_value?: number | string;
    }
    interface ContentExpression {
        conditions?: Array<ContentExpressionItem>;
        expressions?: Array<ContentExpression>;
        logic: Logic;
    }
    interface ContentExpressionItem {
        property_type: PropertyType | string;
        property_name?: string;
        property_operation: PropertyOperation;
        property_value_type?: PropertyValueType;
        property_values: Array<number | string | any>;
        property_period?: PropertyPeriod;
        skip_dict?: boolean;
        property_compose_type?: PropertyComposeType;
        datetime_group_type?: 1 | 0;
        datetime_group_granularity?: string;
    }
}
export declare type AnalysisDSL<T = DSL.ContentQueriesItem, K = any> = {
    version: 3 | number | string;
    app_ids?: Array<number>;
    periods: Array<DSL.PeriodItem>;
    content?: DSL.Content<T>;
    contents?: DSL.Content<T>[];
    use_app_cloud_id?: boolean;
    option?: any;
    show_option: K;
    resources?: Array<{
        project_ids: Array<number>;
        subject_ids: Array<number>;
        app_ids: Array<number>;
    }>;
};
