import type {
    SetStateAction,
    Dispatch,
    Ref
} from "react";
import {
    type NCoreUIKitIcon
} from "../../types";
import type {
    IBottomSheetRef
} from "../bottomSheet/type";
import type IBottomSheetProps from "../bottomSheet/type";
import type {
    DayOfWeekLengthType
} from "../dateSelector/type";
import type {
    DateTimePickerPickerType,
    DateTimePickerDateRange,
    DateTimePickerVariant,
    DateCalendarType
} from "../dateTimePicker/type";
import type {
    MonthOfYearLengthType
} from "../monthSelector/type";
import type {
    RRule
} from "rrule";

export type DateTimeSheetDynamicStyleType = {
    radiuses: NCoreUIKit.ActivePalette["radiuses"];
    borders: NCoreUIKit.ActivePalette["borders"];
    spaces: NCoreUIKit.ActivePalette["spaces"];
    colors: NCoreUIKit.ActivePalette["colors"];
};

interface IDateTimeSheetProps {
    selectMultipleObject:  (dateRange?: DateTimePickerDateRange) => void;
    customTheme?: {
        gapPropagation?: keyof NCoreUIKit.GapPropagationKey;
        sharpness?: keyof NCoreUIKit.SharpnessKey;
        paletteKey?: keyof NCoreUIKit.PaletteKey;
        themeKey?: keyof NCoreUIKit.ThemeKey;
    };
    isTimeSelectWorksWithCenterWhenTimePicker?: boolean;
    setIsActive: Dispatch<SetStateAction<boolean>>;
    multipleSelectMinimumRequiredDayCount?: number;
    customLocalize?: {
        activeLocale?: keyof NCoreUIKit.LocaleKey;
    };
    monthOfYearLengthType?: MonthOfYearLengthType;
    bottomSheetRef: Ref<IBottomSheetRef> | null;
    selectDateRule: (dateRule?: RRule) => void;
    LoadingIconComponentProp?: NCoreUIKitIcon;
    multipleSelectMinimumRequireMS?: number;
    dayOfWeekLength?: DayOfWeekLengthType;
    pickerType: DateTimePickerPickerType;
    localeBasedFirstDayOfWeek?: boolean;
    isShowCalenderChangerTool?: boolean;
    selectObject: (date?: Date) => void;
    dateCalendarType?: DateCalendarType;
    multipleSelectMaximumMS?: number;
    multipleSelectDayLimit?: number;
    isShowTodayIndicator?: boolean;
    variant: DateTimePickerVariant;
    isWorkWithRealtime: boolean;
    isWorkWithSeconds?: boolean;
    dateTimePickerKey: string;
    bottomSheetProps?: Omit<
        IBottomSheetProps, |
    "key" |
    "customKey" |
    "ref" |
    "isActive" |
    "renderBottom" |
    "renderHeader" |
    "onClose"
    >;
    isShowTools?: boolean;
    cancel: () => void;
    maxChoice?: number;
    minChoice?: number;
    isLoading: boolean;
    clean: () => void;
    isActive: boolean;
    dateRule?: RRule;
    dateRange?: {
        start?: Date;
        end?: Date;
    };
    maxDate?: Date;
    minDate?: Date;
    ok: () => void;
    title?: string;
    date?: Date;
};
export type {
    IDateTimeSheetProps as default
};
