import { DateRange } from '../interfaces/calendar.interfaces';
import { IViewStateService } from '../interfaces/view-state.service.interfaces';
import { IDateSelectionService } from '../interfaces/date-selection.service.interfaces';
import { IConstraintsService } from '../interfaces/constraints.service.interfaces';
import { IEventManagerService } from '../interfaces/event-manager.service.interfaces';
import { Binding, EventEmitter } from '@uplink-protocol/core';
import { CalendarDate } from '../interfaces/calendar.interfaces';
import { ICalendarStateService } from '../interfaces';
/**
 * Implementation of CalendarStateService
 * Responsible for centralizing and managing the state of the calendar
 */
export declare class CalendarStateService implements ICalendarStateService {
    private _viewStateService;
    private _dateSelectionService;
    private _constraintsService;
    private _eventManagerService?;
    constructor(_viewStateService: IViewStateService, _dateSelectionService: IDateSelectionService, _constraintsService: IConstraintsService, _eventManagerService?: IEventManagerService | undefined);
    /**
     * Set the minimum selectable date
     */
    setMinDate(date: Date | null, _currentMinDate: Date | null, currentDate: Date, bindings: {
        currentMonth: Binding<number>;
        currentYear: Binding<number>;
        monthName: Binding<string>;
        calendarDays: Binding<CalendarDate[]>;
    }, getMonthNameFn: (month: number) => string, generateCalendarDaysFn: () => CalendarDate[]): Date | null;
    /**
     * Set the maximum selectable date
     */
    setMaxDate(date: Date | null, _currentMaxDate: Date | null, currentDate: Date, bindings: {
        currentMonth: Binding<number>;
        currentYear: Binding<number>;
        monthName: Binding<string>;
        calendarDays: Binding<CalendarDate[]>;
    }, getMonthNameFn: (month: number) => string, generateCalendarDaysFn: () => CalendarDate[]): Date | null;
    /**
     * Set disabled dates
     */
    setDisabledDates(dates: Date[], currentDate: Date, bindings: {
        currentMonth: Binding<number>;
        currentYear: Binding<number>;
        monthName: Binding<string>;
        calendarDays: Binding<CalendarDate[]>;
    }, getMonthNameFn: (month: number) => string, generateCalendarDaysFn: () => CalendarDate[]): Date[];
    /**
     * Add a specific date to the disabled dates list
     */
    addDisabledDate(date: Date, disabledDates: Date[], calendarDaysBinding: Binding<CalendarDate[]>, generateCalendarDaysFn: () => CalendarDate[]): Date[];
    /**
   * Remove a specific date from the disabled dates list
   */
    removeDisabledDate(date: Date, disabledDates: Date[], calendarDaysBinding: Binding<CalendarDate[]>, generateCalendarDaysFn: () => CalendarDate[]): Date[];
    /**
     * Set the date selection mode
     */
    setRangeSelectionMode(isRange: boolean, isRangeSelectionBinding: Binding<boolean>, calendarDaysBinding: Binding<CalendarDate[]>, generateCalendarDaysFn: () => CalendarDate[]): boolean;
    /**
     * Clear the current selection
     */
    clearSelection(isRangeSelection: boolean, selectedDateBinding: Binding<Date | null>, selectedDateRangeBinding: Binding<DateRange>, calendarDaysBinding: Binding<CalendarDate[]>, generateCalendarDaysFn: () => CalendarDate[]): {
        selectedDate: Date | null;
        selectedDateRange: DateRange;
    };
    /**
   * Focus a specific date for accessibility
   */
    focusDate(date: Date | null, focusedDateBinding: Binding<Date | null>): Date | null;
    /**
     * Select a date based on the current selection mode
     */
    selectDate(date: Date, isRangeSelection: boolean, currentSelectedDate: Date | null, currentDateRange: DateRange, isDateDisabledFn: (date: Date) => boolean, bindings: {
        selectedDate: Binding<Date | null>;
        selectedDateRange: Binding<DateRange>;
        focusedDate: Binding<Date | null>;
        calendarDays: Binding<CalendarDate[]>;
    }, events: {
        dateSelected?: EventEmitter<Date>;
        dateRangeSelected?: EventEmitter<DateRange>;
    } | undefined, generateCalendarDaysFn: () => CalendarDate[]): {
        selectedDate: Date | null;
        selectedDateRange: DateRange;
    };
}
