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;
    lang?: "eng" | "nep";
    separator?: string;
};
interface DatePickerProps {
    value?: CustomDate | null;
    onChange?: (date: CustomDate) => void;
    placeholder?: string;
    disabled?: boolean;
    minDate?: CustomDate;
    maxDate?: CustomDate;
    formatOptions?: CustomDateFormatOptions;
    className?: object;
    inputClassName?: string;
    calendarClassName?: string;
    position?: "bottom" | "top" | "auto";
    dayClassName?: string;
    selectedDayClassName?: string;
    todayClassName?: string;
    disabledDayClassName?: string;
    icon: any;
}
interface CalendarProps {
    lang?: "eng" | "nep";
    selectedDate?: CustomDate | null;
    viewDate: CustomDate;
    onDateSelect: (date: CustomDate) => void;
    onViewDateChange: (date: CustomDate) => void;
    minDate?: CustomDate;
    maxDate?: CustomDate;
    calendarClassName?: string;
    dayClassName?: string;
    selectedDayClassName?: string;
    todayClassName?: string;
    disabledDayClassName?: string;
    className?: object;
}
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 NepaliDatePicker: React.FC<DatePickerProps>;

declare const NepaliCalendar: 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 bsMonthsEng: string[];
declare const bsMonthsNep: string[];
declare const bsDaysEng: string[];
declare const bsDaysNep: string[];

export { NepaliCalendar as Calendar, type CustomDate, DateInput, type DatePickerProps, NepaliDatePicker, bsDaysEng, bsDaysNep, bsMonthsEng, bsMonthsNep, convertADToBS, convertBSToAD, formatDate, getDaysInMonth, getTodayBS, isDateInRange, isValidBsDate, parseDate };
