import { DateAdapter } from '../../date-adapter';
import { CustomLabels, DateRange } from '../../utils/models';
import * as i0 from "@angular/core";
export declare class SelectionStrategyService {
    /**
     * Check if a date is selected (for single selection)
     */
    isSelected(date: Date, selectedDate: Date | null, dateAdapter: DateAdapter<Date>): boolean;
    /**
     * Check if a date is the start of a range
     */
    isRangeStart(date: Date, selectedStartDate: Date | null, dateAdapter: DateAdapter<Date>): boolean;
    /**
     * Check if a date is the end of a range
     */
    isRangeEnd(date: Date, selectedEndDate: Date | null, dateAdapter: DateAdapter<Date>): boolean;
    /**
     * Check if a date is in range (between start and end)
     */
    isInRange(date: Date, selectedStartDate: Date | null, selectedEndDate: Date | null, tempEndDate: Date | null, dateAdapter: DateAdapter<Date>): boolean;
    /**
     * Check if a date is selected (for range selection)
     */
    isRangeSelected(date: Date, selectedStartDate: Date | null, selectedEndDate: Date | null, dateAdapter: DateAdapter<Date>): boolean;
    /**
     * Handle single date selection
     */
    handleSingleSelection(date: Date, selectedDate: Date | null, showTimePicker: boolean, existingTime?: Date): {
        selectedDate: Date;
        shouldEmit: boolean;
    };
    /**
     * Handle range date selection
     */
    handleRangeSelection(date: Date, selectedStartDate: Date | null, selectedEndDate: Date | null, showTimePicker: boolean, existingTime?: Date): {
        selectedStartDate: Date | null;
        selectedEndDate: Date | null;
        shouldEmit: boolean;
        activeInput: 'start' | 'end';
    };
    /**
     * Check if a period is active (for sidebar periods)
     */
    isActivePeriod(period: CustomLabels, selectedStartDate: Date | null, selectedEndDate: Date | null, dateAdapter: DateAdapter<Date>, allPeriods: CustomLabels[]): boolean;
    /**
     * Check if a period is matched (for sidebar periods)
     */
    isPeriodMatch(period: CustomLabels, selectedStartDate: Date, selectedEndDate: Date, dateAdapter: DateAdapter<Date>): boolean;
    /**
     * Handle period selection
     */
    selectPeriod(period: CustomLabels): {
        selectedPeriod: any;
        dateRange?: DateRange;
        isCustom: boolean;
    };
    /**
     * Apply time to a date
     */
    applyTimeToDate(date: Date, timeDate: Date): Date;
    /**
     * Check if first date is before second date
     */
    private isDateBefore;
    /**
     * Create date range object
     */
    createDateRange(start: Date | null, end: Date | null): DateRange | null;
    /**
     * Check if range selection is complete
     */
    isRangeComplete(selectedStartDate: Date | null, selectedEndDate: Date | null): boolean;
    /**
     * Get the active date for range selection
     */
    getActiveDateForRange(activeInput: 'start' | 'end' | '', selectedStartDate: Date | null, selectedEndDate: Date | null): Date | null;
    /**
     * Update time for range selection
     */
    updateRangeTime(timeDate: Date, activeInput: 'start' | 'end' | '', selectedStartDate: Date | null, selectedEndDate: Date | null): {
        selectedStartDate: Date | null;
        selectedEndDate: Date | null;
        shouldEmit: boolean;
    };
    /**
     * Update time for single selection
     */
    updateSingleTime(timeDate: Date, selectedDate: Date | null): {
        selectedDate: Date;
        shouldEmit: boolean;
    };
    /**
     * Handle mouse enter for range selection preview
     */
    handleMouseEnter(date: Date, selectedStartDate: Date | null, selectedEndDate: Date | null): Date | null;
    /**
     * Check if date is today
     */
    isToday(date: Date, dateAdapter: DateAdapter<Date>, showToday: boolean): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectionStrategyService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SelectionStrategyService>;
}
