import type { DataLimit } from '../../i18n';
import { type Weeks } from '../calendar';
export type { DataLimit };
export type QuickKey = DataLimit | 'custom';
export declare const limitKeys: DataLimit[];
export declare const quickKeys: QuickKey[];
export interface QuickGenPeriodTimesOptions {
    initTime?: Date;
    weekStartAt?: Weeks;
}
export interface GenPeriodTimesOptions extends QuickGenPeriodTimesOptions {
    start?: (time: Date, weekOffset: number) => void;
    end?: (time: Date, weekOffset: number) => void;
}
export declare const genPeriodTimes: ({ start, end, initTime, weekStartAt }?: GenPeriodTimesOptions) => {
    start: Date;
    end: Date;
};
export declare const quickGenPeriodTimes: <T extends DataLimit = DataLimit>({ periods, ...options }?: {
    periods?: T[];
} & QuickGenPeriodTimesOptions) => Record<Exclude<T, "all">, {
    start: Date;
    end: Date;
}> & ("all" extends T ? {
    all: null;
} : {});
export declare const quickGenPeriodTime: <T extends DataLimit = DataLimit>(period: T, options?: QuickGenPeriodTimesOptions) => T extends "all" ? null : {
    start: Date;
    end: Date;
};
export type PeriodTimeInfo<T extends QuickKey = QuickKey, RT = Date> = T extends 'all' ? {
    type: 'all';
    /** Locale time */
    start?: null;
    /** Locale time */
    end?: null;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} : {
    type: Exclude<T, 'all'>;
    /** Locale time */
    start: RT;
    /** Locale time */
    end: RT;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
};
export declare const quickGenPeriodTimeInfo: <T extends DataLimit = DataLimit>(type: T, options?: QuickGenPeriodTimesOptions, tzOffset?: number) => PeriodTimeInfo<T>;
export declare const localeInfo2UTCInfo: (info: PeriodTimeInfo) => {
    type: "all";
    /** Locale time */
    start?: null;
    /** Locale time */
    end?: null;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "today";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "yesterday";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "week";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "lastWeek";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last7Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "month";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last30Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last90Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last180Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last6Month";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "year";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "custom";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
};
export declare const UTCInfo2LocaleInfo: (info: PeriodTimeInfo) => {
    type: "all";
    /** Locale time */
    start?: null;
    /** Locale time */
    end?: null;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "today";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "yesterday";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "week";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "lastWeek";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last7Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "month";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last30Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last90Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last180Days";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "last6Month";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "year";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
} | {
    type: "custom";
    /** Locale time */
    start: Date;
    /** Locale time */
    end: Date;
    /** Timezone offset in minutes. e.g. UTC+05:45 => `-345`, UTC-01:00 => `60` */
    tzOffset: number;
};
