import { ReactNode } from 'react';
import { EBookingWizardOverlayDirection, EBookingWizardTheme } from '../../components/generic/BookingWizard/BookingWizard';
import type { BookingWizardContextType } from '../../components/generic/BookingWizard/BookingWizardContext';
import { BookingWizardGuestSelectorProps } from '../../components/generic/BookingWizard/BookingWizardGuestSelector/BookingWizardGuestSelector';
import { BaseEngine, BaseEngineConfig } from '../BaseEngine';
import { ShowPromoCodeAlertProps, ShowYearOnCalendarProps } from '../../models/Api/HotelOverrideDTO';
import type { BookingWizardProperty } from '../../models/BookingWizard/BookingWizardProperty';
import type { TBookingWizardProperties } from '../../models/BookingWizard/BookingWizardTypes';
import { Hotel } from '../../models/Client/Hotel/Hotel';
export interface BookingWizardEngineConfig extends BaseEngineConfig, ShowYearOnCalendarProps, ShowPromoCodeAlertProps, Pick<Hotel, 'startsWeekOnDay'> {
    widgetType: 'property' | 'group';
    theme: EBookingWizardTheme;
    layout: 'horizontal' | 'vertical' | 'button';
    useMobileButtonLayout?: boolean;
    properties: TBookingWizardProperties;
    selectedProperty?: BookingWizardProperty;
    defaultColors: BookingWizardProperty['colors'];
    wrapperClassname?: string;
    contentClassname?: string;
    maxOccupancy?: number;
    disableChild?: boolean;
    showInfants?: boolean;
    disableRoom?: boolean;
    hideGuestSelect?: boolean;
    hidePromocode?: boolean;
    hideProperty?: boolean;
    dateFormat?: string;
    hideTooltips?: boolean;
    overlayDirection?: EBookingWizardOverlayDirection;
    onSubmit?: BookingWizardContextType['onSubmit'];
    notes?: {
        date?: ReactNode;
        guest?: ReactNode;
    };
    guestAgeConfig?: Pick<BookingWizardGuestSelectorProps, 'minAdultAge' | 'maxAdultAge' | 'ageRange'>;
    searchConfig?: {
        companyId: number;
        searchFilter?: (properties: TBookingWizardProperties, query?: string) => TBookingWizardProperties;
        sortCompareFn?: <T>(a: T, b: T) => number;
        combineAddress?: (address: BookingWizardProperty['address']) => string;
    };
}
export declare class BookingWizardEngine extends BaseEngine<BookingWizardEngineConfig> {
    constructor(bookingContainer: HTMLElement, config?: BookingWizardEngineConfig);
    protected render(): Promise<void>;
}
