export declare enum WeekGrouping {
    Group445 = 0,
    Group544 = 1,
    Group454 = 2
}
export declare enum LastDayOfWeek {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
}
export declare enum LastMonthOfYear {
    January = 0,
    February = 1,
    March = 2,
    April = 3,
    May = 4,
    June = 5,
    July = 6,
    August = 7,
    September = 8,
    October = 9,
    November = 10,
    December = 11
}
export declare enum WeekCalculation {
    LastDayBeforeEOM = 0,
    LastDayBeforeEomExceptLeapYear = 1,
    LastDayNearestEOM = 2,
    FirstBOWOfFirstMonth = 3,
    PenultimateDayOfWeekNearestEOM = 4,
    CustomLeapYear = 5
}
export interface RetailCalendarOptions {
    weekGrouping: WeekGrouping;
    lastDayOfWeek: LastDayOfWeek;
    lastMonthOfYear: LastMonthOfYear | number;
    weekCalculation: WeekCalculation;
    /**
     * If the value of addLeapWeekToMonth is 11, then the 11th month of the years that have 53 weeks will be extended by an additional week
     */
    addLeapWeekToMonth?: number;
    beginningMonthIndex?: number;
    leapYear?: number;
    leapYearEndDate?: string;
    leapYearFrequency?: number;
}
export declare const NRFCalendarOptions: RetailCalendarOptions;
export declare type RetailCalendarConstructor = {
    new (calendarOptions: RetailCalendarOptions, year: number): RetailCalendar;
    getRetailCalendar: (calendarOptions: RetailCalendarOptions, year: number) => RetailCalendar;
};
export interface RetailCalendar {
    year: number;
    numberOfWeeks: number;
    months: RetailCalendarMonth[];
    weeks: RetailCalendarWeek[];
    days: RetailCalendarDay[];
    addLeapWeekToMonth: number;
}
export interface RetailCalendarDay {
    weekOfYear: number;
    monthOfYear: number;
    dayOfWeek: number;
    dayOfMonth: number;
    dayOfYear: number;
    gregorianStartDate: Date;
    gregorianEndDate: Date;
    gregorianMonthOfYear: number;
    gregorianDayOfYear: number;
    gregorianDayOfMonth: number;
}
export interface RetailCalendarWeek {
    weekOfYear: number;
    weekOfMonth: number;
    weekOfQuarter: number;
    monthOfYear: number;
    quarterOfYear: number;
    gregorianStartDate: Date;
    gregorianEndDate: Date;
}
export interface RetailCalendarMonth {
    monthOfYear: number;
    quarterOfYear: number;
    numberOfWeeks: number;
    weeks: RetailCalendarWeek[];
    gregorianStartDate: Date;
    gregorianEndDate: Date;
}
export interface LastDayStrategy {
    getLastDayForGregorianLastDay(lastDayOfGregorianYear: Date, isoLastDayOfWeek: number, retailCalendarYear: number): Date;
}
export declare type WeekOfCalendar = {
    calendar: RetailCalendar;
    week: RetailCalendarWeek;
};
export {};
declare global {
    namespace jest {
        interface Matchers<R> {
            toBeTheSameWeekAs(expected: any): R;
        }
    }
}
