import { ReactNode, ChangeEvent } from 'react';
import { ButtonColorTypes, ButtonRoundedTypes, ButtonVariantTypes } from '../../../../types/button-types';
export type SelectOptions = {
    label: string;
    value: string;
    defaultChecked?: boolean;
};
export type RowStatusOptions = {
    label: string;
    value: string;
    colorClass: string;
};
export type ChipItem = {
    id: string;
    label: string;
    value?: string;
    removable?: boolean;
};
export type AdvancedDateRangeValue = {
    startDate?: string;
    endDate?: string;
};
export type AdvancedNumberRangeValue = {
    min?: string | number;
    max?: string | number;
};
export type AdvancedValue = string | string[] | boolean | number | AdvancedDateRangeValue | AdvancedNumberRangeValue;
export type AdvancedField = {
    id: string;
    label: string;
    type: "text" | "number" | "select" | "date" | "date-range" | "number-range" | "radio" | "checkbox" | "email" | "password" | "switch";
    options?: SelectOptions[];
    isLoading?: boolean;
    defaultValue?: AdvancedValue;
    placeholder?: string;
    customTrue?: string;
    customFalse?: string;
    dateDisplayFormat?: string;
    dateValueFormatter?: (value: Date) => string;
    dateRangeValueFormatter?: (value: {
        startDate: Date;
        endDate: Date;
    }) => AdvancedDateRangeValue;
    minDate?: string | Date;
    maxDate?: string | Date;
    numberPrefix?: string;
    numberSuffix?: string;
    numberThousandSeparator?: string;
    numberDecimalSeparator?: string;
    numberValueFormatter?: (value: string) => string | number;
    numberRangeFromPlaceholder?: string;
    numberRangeToPlaceholder?: string;
    numberRangeOptions?: Array<{
        label: string;
        min?: string | number;
        max?: string | number;
    }>;
    numberRangeValueFormatter?: (value: AdvancedNumberRangeValue) => AdvancedNumberRangeValue;
    numberRangeDisplayFormatter?: (value: AdvancedNumberRangeValue) => string;
    onMenuScrollToBottom?: (id: string) => void;
    isLoadingMore?: boolean;
    hasMore?: boolean;
    paginationLoadingMessage?: string;
    defaultOptions?: Array<{
        value: string;
        label: string;
        color?: string;
        id?: string;
    }>;
    cacheUniqs?: boolean;
    onInputChange?: (inputValue: string, actionMeta: any) => void;
    filterOption?: ((option: any, inputValue: string) => boolean) | null;
    debounceDelay?: number;
    useLabelOnChip?: boolean;
};
export interface AdvancedToolbarProps {
    id?: string;
    /** ————— Row 1 ————— */
    columnOptions?: SelectOptions[];
    columnValue?: string;
    onChangeColumn?: (value: string) => void;
    searchValue?: string;
    onChangeSearch?: (event: ChangeEvent<HTMLInputElement>) => void;
    onSearchSubmit?: (value: string) => void;
    searchPlaceholder?: string;
    enableSearchHistory?: boolean;
    searchHistoryStorageKey?: string;
    maxSearchHistory?: number;
    searchHistoryDebounceMs?: number;
    onFilterClick?: () => void;
    onSortClick?: () => void;
    onCreateClick?: () => void;
    buttonCreateLabel?: string;
    buttonCreateColor?: ButtonColorTypes;
    buttonCreateVariant?: ButtonVariantTypes;
    buttonCreateRounded?: ButtonRoundedTypes;
    actionSlot?: ReactNode;
    filterPermission?: boolean;
    sortPermission?: boolean;
    createPermission?: boolean;
    disabledFilter?: boolean;
    disabledSort?: boolean;
    disabledCreate?: boolean;
    /** ————— Row 2 ————— */
    slotLeft?: ReactNode;
    showSecondaryControls?: boolean;
    rowStatusOptions?: RowStatusOptions[];
    statusValue?: string;
    onChangeStatus?: (value: string) => void;
    fieldSlot?: ReactNode;
    filters?: ChipItem[];
    onRemoveFilter?: (id: string) => void;
    onResetFilter?: () => void;
    sortOptions?: SelectOptions[];
    sortValue?: string;
    onChangeSort?: (value: string) => void;
    /** ————— Advance Filter (opsional built-in) ————— */
    advancedFields?: AdvancedField[];
    initialAdvancedValues?: Record<string, AdvancedValue>;
    onApplyAdvanced?: (filters: ChipItem[]) => void;
    onResetAdvanced?: () => void;
    resetFiltersLabel?: string;
    showColumnNoneOption?: boolean;
    showSortNoneOption?: boolean;
    showPendingStatusNoneOption?: boolean;
}
