import { ControllerAdapter } from "@uplink-protocol/core";
import { ControllerMetadata } from "@uplink-protocol/core/dist/uplink/interfaces/metadata/controller-metadata.interface";
import { TimeOptions, TimeRange, TimeView } from "./interfaces";
import { TypedTimeController, TimeControllerBindings, TimeControllerMethods, TimeControllerEvents } from "./types";
/**
 * TimeControllerClass - A full featured time picker controller class.
 * Provides functionality for time picking and time display.
 *
 * This controller uses a service-oriented architecture where all the core
 * functionality is delegated to specialized services.
 */
export interface TimeControllerInterface extends TypedTimeController {
    _selectedTime: Date | null;
    _selectedTimeRange: TimeRange;
    _focusedSegment: 'hours' | 'minutes' | 'seconds' | 'milliseconds' | 'period' | null;
    _minTime: Date | null;
    _maxTime: Date | null;
    _disabledTimes: Date[];
    _disabledHours: number[];
    _disabledMinutes: number[];
    _disabledSeconds: number[];
    _use12HourFormat: boolean;
    _showSeconds: boolean;
    _showMilliseconds: boolean;
    _minuteStep: number;
    _secondStep: number;
    _locale: string;
    _timeFormat: string | null;
    _timeFormatOptions: Intl.DateTimeFormatOptions | null;
    _isRangeSelection: boolean;
}
export declare class TimeControllerClass implements TimeControllerInterface {
    bindings: TimeControllerBindings;
    methods: TimeControllerMethods;
    events: TimeControllerEvents;
    meta?: ControllerMetadata;
    __adapter?: ControllerAdapter;
    options?: TimeOptions;
    _selectedTime: Date | null;
    _selectedTimeRange: TimeRange;
    _focusedSegment: 'hours' | 'minutes' | 'seconds' | 'milliseconds' | 'period' | null;
    _minTime: Date | null;
    _maxTime: Date | null;
    _disabledTimes: Date[];
    _disabledHours: number[];
    _disabledMinutes: number[];
    _disabledSeconds: number[];
    _use12HourFormat: boolean;
    _showSeconds: boolean;
    _showMilliseconds: boolean;
    _minuteStep: number;
    _secondStep: number;
    _locale: string;
    _timeFormat: string | null;
    _timeFormatOptions: Intl.DateTimeFormatOptions | null;
    _isRangeSelection: boolean;
    private _timeService;
    private _timeFormattingService;
    private _timeSelectionService;
    private _timeViewStateService;
    private _timeEventManagerService;
    private _timeNavigationService;
    private _timeConstraintsService;
    private _timeGeneratorService;
    private _timeConfigurationService;
    private _timeValidationService;
    /**
     * Constructor - initializes the controller with optional configuration
     * @param options Time configuration options
     */
    constructor(options?: TimeOptions);
    selectTime(time: Date): void;
    goToNextHour(): void;
    goToPreviousHour(): void;
    goToNextMinute(): void;
    goToPreviousMinute(): void;
    goToNextSecond(): void;
    goToPreviousSecond(): void;
    clearSelection(): void;
    setRangeSelectionMode(isRange: boolean): void;
    get selectedTimeRange(): {
        start: Date | null;
        end: Date | null;
        startTime: Date | null;
        endTime: Date | null;
    };
    setHour(hour: number, period?: 'AM' | 'PM'): void;
    setMinute(minute: number): void;
    setSecond(second: number): void;
    setMillisecond(millisecond: number): void;
    goToCurrentTime(): void;
    togglePeriod(): void;
    setFocusedSegment(segment: 'hours' | 'minutes' | 'seconds' | 'milliseconds' | 'period' | null): void;
    clearFocusedSegment(): void;
    focusSegment(segment: 'hours' | 'minutes' | 'seconds' | 'milliseconds' | 'period'): void;
    setMinTime(time: Date | null): void;
    setMaxTime(time: Date | null): void;
    setDisabledTimes(times: Date[]): void;
    addDisabledTime(time: Date): Date[];
    removeDisabledTime(time: Date): Date[];
    getDisabledTimes(): Date[];
    setDisabledHours(hours: number[]): number[];
    addDisabledHour(hour: number): number[];
    removeDisabledHour(hour: number): number[];
    getDisabledHours(): number[];
    setDisabledMinutes(minutes: number[]): number[];
    setDisabledSeconds(seconds: number[]): number[];
    setLocale(locale: string): void;
    getLocale(): string;
    setTimeFormatOptions(options: Intl.DateTimeFormatOptions | null): void;
    getTimeFormatOptions(): Intl.DateTimeFormatOptions | null;
    getFormattedTime(): string | null;
    formatTime(time: Date, options?: Intl.DateTimeFormatOptions | string): string;
    setUse12HourFormat(use12Hour: boolean): void;
    setShowSeconds(show: boolean): void;
    setShowMilliseconds(show: boolean): void;
    setMinuteStep(step: number): void;
    setSecondStep(step: number): void;
    isCurrentTime(time: Date): boolean;
    generateTimeView(): TimeView;
    isTimeValid(time: Date): boolean;
    roundToStep(time: Date): Date;
    moveFocusToNextSegment(): void;
    moveFocusToPreviousSegment(): void;
    moveFocusToHours(): void;
    moveFocusToMinutes(): void;
    moveFocusToSeconds(): void;
    moveFocusToMilliseconds(): void;
    moveFocusToPeriod(): void;
    selectFocusedSegment(): void;
    /**
     * Generate time segments for binding
     * @returns Time segments object
     */
    private generateTimeSegments;
    /**
     * Create generation options from current state
     * @returns Time generation options
     */
    private createGenerationOptions;
    /**
     * Update all reactive bindings
     */
    private updateAllBindings;
}
/**
 * TimeController - Factory function that creates and returns a new TimeControllerClass instance.
 *
 * @param options Optional time configuration options
 * @returns A TimeControllerClass instance
 */
export declare const TimeController: (options?: TimeOptions) => TimeControllerClass;
