import { Month, TimeframeTick, ZeniDate } from '@zeniai/client-epic-state';
import { AllowedTimeframe } from '../../common/downloadReport/types/downloadReportOptions';
export type DateRange = TimeframeTick;
interface CalendarPeriodValue {
    dateRange: DateRange;
    firstMonthOfFY: Month;
    timeframe: AllowedTimeframe;
}
export declare function getNumberOfPeriods(firstMonthOfFY: Month, timeFrame: AllowedTimeframe, dateRange: TimeframeTick, maxNumberOfPeriods?: number): number;
export declare function getCalendarPeriodValue(firstMonthOfFY: Month, timeframe: AllowedTimeframe, endDate: ZeniDate, numOfPeriods?: number): CalendarPeriodValue;
export declare class CalendarPeriod {
    private _firstMonthOfFY;
    private _timeframe;
    private _dataAvailable;
    private _endDate;
    private _numberOfPeriods;
    private _maxNumberOfPeriods;
    constructor(startMonthOfFY: Month, timeframe: AllowedTimeframe, dataAvailable: DateRange, numberOfPeriods: number, maxNumberOfPeriods: number, endDate?: ZeniDate);
    get value(): CalendarPeriodValue;
    get dataAvailable(): TimeframeTick;
    get firstMonthOfFY(): 9 | 7 | 6 | 1 | 3 | 10 | 2 | 4 | 8 | 5 | 11 | 12;
    get timeframe(): AllowedTimeframe;
    set timeframe(newTimeframe: AllowedTimeframe);
    get numberOfPeriods(): number;
    get maxNumberOfPeriods(): number;
    set maxNumberOfPeriods(newValue: number);
    get startDate(): ZeniDate;
    get endDate(): ZeniDate;
    /**
     * Valid calendar period for the given timeframe
     * and maxNumberOfPeriods.
     * @returns
     */
    getValidCalendarPeriod(): DateRange;
    canUpdateToPeriod(startDate: ZeniDate, endDate: ZeniDate): boolean;
    updatePeriod(startDate: ZeniDate, endDate: ZeniDate): boolean;
    updateStartDate(startDate: ZeniDate): boolean;
    updateEndDate(endDate: ZeniDate): boolean;
}
export {};
