import { CalendarDate } from './calendar.interfaces';
/**
 * Calendar service interface
 * Responsible for calendar generation and navigation functions
 */
export interface ICalendarService {
    /**
     * Generate calendar data for a specific month/year
     */
    generateCalendarDays(year: number, month: number, options: CalendarGenerationOptions): CalendarDate[];
    /**
     * Get month name from month index
     */
    getMonthName(month: number): string;
    /**
     * Get weekday names starting from the specified first day
     */
    getWeekdayNames(firstDayOfWeek: number, short?: boolean): string[];
    /**
     * Navigate to next month from current date
     */
    getNextMonth(currentDate: Date): Date;
    /**
     * Navigate to previous month from current date
     */
    getPreviousMonth(currentDate: Date): Date;
    /**
     * Navigate to next year from current date
     */
    getNextYear(currentDate: Date): Date;
    /**
     * Navigate to previous year from current date
     */
    getPreviousYear(currentDate: Date): Date;
    /**
     * Set the localization service
     */
    setLocalizationService(service: any): void;
    /**
     * Get the localization service
     */
    getLocalizationService(): any | null;
    /**
     * Check if a date is today
     */
    isToday(date: Date): boolean;
    /**
     * Get the ISO week number for a date
     */
    getWeekNumber(date: Date): number;
}
/**
 * Options for calendar generation
 */
export interface CalendarGenerationOptions {
    selectedDate: Date | null;
    selectedDateRange: {
        startDate?: Date | null;
        endDate?: Date | null;
        start?: Date | null;
        end?: Date | null;
    };
    focusedDate: Date | null;
    firstDayOfWeek: number;
    minDate: Date | null;
    maxDate: Date | null;
    disabledDates: Date[];
    disabledDaysOfWeek: number[];
    isRangeSelection: boolean;
    isDateDisabledFn: (date: Date) => boolean;
    hideOtherMonthDays: boolean;
    locale?: string;
    weekNumbers?: boolean;
    fullWeekdays?: boolean;
}
/**
 * Options for month view generation
 */
export interface MonthViewGenerationOptions {
    selectedDateRange: any;
    isRangeSelection: any;
    selectedDate: Date | null;
    currentDate: Date;
    minDate: Date | null;
    maxDate: Date | null;
    isMonthDisabledFn?: (year: number, month: number) => boolean;
}
/**
 * Options for year view generation
 */
export interface YearViewGenerationOptions {
    selectedDateRange: any;
    isRangeSelection: any;
    selectedDate: Date | null;
    currentDate: Date;
    minDate: Date | null;
    maxDate: Date | null;
    isYearDisabledFn?: (year: number) => boolean;
    yearRangeSize?: number;
    selectedYearRange?: {
        startYear: number;
        endYear: number;
    };
}
