import { ReactNode } from 'react';
import { ArrayPath, Control, FieldValues, UseFieldArrayReturn } from 'react-hook-form';
export type AlgorithmType = 'INTELLIGENT' | 'STATIC';
export type FilterType = 'exclude' | 'include';
export declare const STATIC_ALGORITHM_TYPE: {
    readonly PRODUCT: "PRODUCT";
};
export interface IntelligentAlgorithmOption {
    id: string;
    icon?: ReactNode;
    description?: ReactNode;
    label: string;
    value: string;
    desktopProductCount?: number;
    mobileProductCount?: number;
    timeFrame?: string;
    isTimeFrameDisabled?: boolean;
    isOptionsDisabled?: boolean;
    suitablePages?: string[];
    [key: string]: unknown;
}
export interface StaticAlgorithmOption {
    key: string;
    title: string;
    description?: string;
    icon?: ReactNode;
    [key: string]: unknown;
}
export interface EmailAlgorithmConfig {
    isMultiSelect?: boolean;
    uniqueItems?: boolean;
    isIntelligentDisabled?: boolean;
    isStaticDisabled?: boolean;
    [key: string]: unknown;
}
export interface RecommendationCardConfig {
    isRecommendation?: boolean;
    isEmail?: boolean;
    isWhatsapp?: boolean;
    isSearch?: boolean;
    isPromotion?: boolean;
    isKeyword?: boolean;
    showShuffleProducts?: boolean;
    showRecommendOtherCategories?: boolean;
    showShufflePromotions?: boolean;
}
export interface SharedAlgorithmProps<TFieldValues extends FieldValues = FieldValues> {
    control: Control<TFieldValues>;
    fields: Record<string, unknown>[];
    intelligentAlgorithms: IntelligentAlgorithmOption[];
    staticAlgorithms?: Record<string, StaticAlgorithmOption>;
    emailAlgorithmConfig?: EmailAlgorithmConfig;
}
export interface RecommendationCardProps<TFieldValues extends FieldValues = FieldValues> {
    control: Control<TFieldValues>;
    fieldArray: UseFieldArrayReturn<TFieldValues, ArrayPath<TFieldValues>, 'id'>;
    intelligentAlgorithms: IntelligentAlgorithmOption[];
    staticAlgorithms?: Record<string, StaticAlgorithmOption>;
    emailAlgorithmConfig?: EmailAlgorithmConfig;
    labels?: {
        title?: ReactNode;
        description?: ReactNode;
        shuffleProducts?: string;
        recommendOtherCategories?: string;
        shufflePromotions?: string;
        exclusionFilters?: ReactNode;
        inclusionFilters?: ReactNode;
    };
    config?: RecommendationCardConfig;
    onFiltersToggle?: (type: FilterType, isOpen: boolean) => void;
    renderFilters?: (type: FilterType) => ReactNode;
    renderAlgorithmModals?: (props: SharedAlgorithmProps<TFieldValues> & {
        append: UseFieldArrayReturn<TFieldValues, ArrayPath<TFieldValues>, 'id'>['append'];
    }) => ReactNode;
    renderSelectedAlgorithms?: (props: SharedAlgorithmProps<TFieldValues> & {
        update: UseFieldArrayReturn<TFieldValues, ArrayPath<TFieldValues>, 'id'>['update'];
        move: (from: number, to: number) => void;
        swap: (index1: number, index2: number) => void;
        remove: (index: number) => void;
        config?: RecommendationCardConfig;
    }) => ReactNode;
}
