import { IPaymentCheckoutDetails, IPromoCodeDetails, ReservationsDTO } from '@roomstay/core';
import type dayjs from 'dayjs';
import type { Addon } from '../../models/Addon/Addon';
import type BasketAddonRow from '../../models/BasketAddonRow';
import type BasketRow from '../../models/BasketRow';
import { ItemisedFee } from '../../models/Fee';
import type { IPromotion } from '../../models/Promotion/IPromotion.type';
import type { RoomRate } from '../../models/Room/RoomRate';
import { RoomstaySession } from '../../models/RoomstaySession';
export interface BasketContextType {
    selectedBasketRow: BasketRow;
    currentBasketRows: BasketRow[];
    basketAddonRows: BasketAddonRow[];
    basketFeeRows: ItemisedFee[];
    loadedPromotion: IPromotion | null;
    promoCodeDetails: IPromoCodeDetails | null;
    quoteQueryID: string;
    startDate: dayjs.Dayjs;
    endDate: dayjs.Dayjs;
    pencilId: string | undefined;
    isLoadingPriceQuote: boolean;
    addBasketRow: (row: BasketRow) => void;
    addRate: (rate: RoomRate, notify?: boolean) => Promise<void>;
    getAllValidRows: () => BasketRow[];
    getAllDatelessRows: () => BasketRow[];
    isValidDateRange: () => boolean;
    getNumberOfAdults: (withTranslation: boolean) => number | string;
    getNumberOfChildren: (withTranslation: boolean) => number | string;
    getNumberOfInfants: (withTranslation: boolean) => number | string;
    getNumberOfRooms: (withTranslation: boolean) => number | string;
    getTotalPrice: () => any;
    getTotalQuoteDeposit: () => number;
    getDepositQuoteFees: () => number;
    getTotalFees: () => number;
    getItemisedFees: () => ItemisedFee[];
    getTotalPayNow: () => number | null;
    updateBasketRow: (row: BasketRow, updateGlobalDates?: boolean) => void;
    removeBasketRow: (row: BasketRow) => void;
    clearBasketRows: (confirm: boolean) => void;
    selectBasketRow: (row: BasketRow | null) => void;
    setStartDate: (date: dayjs.Dayjs) => void;
    setEndDate: (date: dayjs.Dayjs) => void;
    setPromoCodeDetails: (details: IPromoCodeDetails | null) => void;
    quoteOrPencilReservation: (applyQuote: () => boolean) => void;
    hasCheckedOut: boolean;
    reservationData: ReservationsDTO;
    booked: (data: ReservationsDTO, reservationRequest?: RoomstaySession['reservationRequest']) => Promise<void>;
    rollback: () => void;
    checkedOut: (data: ReservationsDTO) => void;
    clearSelectedRates: () => void;
    finish: () => void;
    additionalPaymentRequired: (data: IPaymentCheckoutDetails) => void;
    getRowForAddon: (selectedAddon: Addon) => BasketAddonRow | undefined;
    setAddonQuantities: (addon: Addon, quantities: {
        quantity: number;
        adult: number;
        child: number;
    }, selectedDate: string, selectedTime: string) => void;
    removeBasketAddonRow: (row: BasketAddonRow) => void;
    attemptSelectUnfilledRow: () => BasketRow | undefined;
    initBasketRows: (basketRows: BasketRow[]) => void;
    updateBasketFeeRows: () => void;
    onDatePickerOpenChange: (isOpen: boolean) => void;
    isDatePickerOpen: boolean;
    canAddAnotherRoom: boolean;
    hasPriceQuoteError: boolean;
    isQuoteOrPencilReady: boolean;
}
