import React from 'react';

interface CustomDate {
    year: number;
    month: number;
    day: number;
}
type CustomDateFormatOptions = {
    format?: "YYYY-MM-DD" | "DD-MM-YYYY" | "MM/DD/YYYY" | "YYYY/MM/DD" | string;
    locale?: "en" | "ne";
    separator?: string;
};
interface DatePickerProps {
    /**
     * Selected date in Bikram Sambat format
     */
    value?: CustomDate | null;
    /**
     * Callback when date changes
     */
    onChange?: (date: CustomDate) => void;
    /**
     * Placeholder text for input
     */
    placeholder?: string;
    /**
     * Disable the datepicker
     */
    disabled?: boolean;
    /**
     * Min date (inclusive)
     */
    minDate?: CustomDate;
    /**
     * Max date (inclusive)
     */
    maxDate?: CustomDate;
    /**
     * Format for displaying the date
     */
    formatOptions?: CustomDateFormatOptions;
    className?: string;
    /**
     * Additional class name for input field
     */
    inputClassName?: string;
    /**
     * Additional class name for calendar popup
     */
    calendarClassName?: string;
    /**
     * Position of the calendar popup
     */
    position?: "bottom" | "top" | "auto";
    /**
     * Additional class names for day in claendar
     */
    dayClassName?: string;
    /**
     * Additional class names for selected day in calendar
     */
    selectedDayClassName?: string;
    /**
     * Additional class names for today date in claendar
     */
    todayClassName?: string;
    /**
     * Additional class names for disabled day in calendar
     */
    disabledDayClassName?: string;
}
interface CalendarProps {
    /**
     * Currently selected locale
     */
    locale?: "en" | "ne";
    /**
     * Currently selected date
     */
    selectedDate?: CustomDate | null;
    /**
     * Currently viewed month and year
     */
    viewDate: CustomDate;
    /**
     * Callback when date is selected
     */
    onDateSelect: (date: CustomDate) => void;
    /**
     * Callback when month view changes
     */
    onViewDateChange: (date: CustomDate) => void;
    /**
     * Min date (inclusive)
     */
    minDate?: CustomDate;
    /**
     * Max date (inclusive)
     */
    maxDate?: CustomDate;
    /**
     * Additional class names
     */
    calendarClassName?: string;
    /**
     * Additional class names
     */
    dayClassName?: string;
    /**
     * Additional class names
     */
    selectedDayClassName?: string;
    /**
     * Additional class names
     */
    todayClassName?: string;
    /**
     * Additional class names
     */
    disabledDayClassName?: string;
}
interface DateInputProps {
    value?: CustomDate | null;
    onChange?: (value: string) => void;
    onSelect?: (date: CustomDate | null) => void;
    placeholder?: string;
    disabled?: boolean;
    formatOptions?: CustomDateFormatOptions;
    className?: string;
    onFocus?: () => void;
    onBlur?: () => void;
}

declare const DatePicker: React.FC<DatePickerProps>;

declare const Calendar: React.FC<CalendarProps>;

declare const DateInput: React.FC<DateInputProps>;

declare function convertADToBS(adDate: Date): CustomDate;
declare function convertBSToAD(bsDate: CustomDate): CustomDate;
declare function getTodayBS(): CustomDate;
declare function getDaysInMonth(year: number, month: number): number;
declare function isValidBsDate(date: CustomDate): boolean;
declare function isDateInRange(date: CustomDate, minDate?: CustomDate, maxDate?: CustomDate): boolean;

declare function formatDate(date: CustomDate, options?: CustomDateFormatOptions): string;
declare function parseDate(dateStr: string, format?: string): CustomDate | null;

declare const bsMonthsEn: string[];
declare const bsMonthsNe: string[];
declare const bsDaysEn: string[];
declare const bsDaysNe: string[];

export { Calendar, type CustomDate, DateInput, type DatePickerProps, DatePicker as NepaliDatePicker, bsDaysEn, bsDaysNe, bsMonthsEn, bsMonthsNe, convertADToBS, convertBSToAD, formatDate, getDaysInMonth, getTodayBS, isDateInRange, isValidBsDate, parseDate };
