import { IBookingQuoteResponse, ReservationDTO } from '@roomstay/core';
import dayjs from 'dayjs';
import BasketRowDifferences from './BasketRowDifferences';
import type { Room } from './Room/Room';
import type { RoomRate } from './Room/RoomRate';
import UserProfile from './UserProfile';
import { Color } from '../util/Color';
export declare enum EPromoCodeStatus {
    Valid = "valid",
    Invalid = "invalid",
    New = "new",
    Forbidden = "forbidden"
}
export default class BasketRow {
    private uniqId;
    private room;
    private rate;
    private isStale;
    private adults;
    private children;
    private infants;
    private preGuestsState;
    private promoCode;
    private promoCodeStatus;
    /**
     * Warning message associated with an invalid promo code.
     * Used for displaying tooltip or error messages to the user.
     */
    private promoCodeWarningMessage;
    private manualInputPromoCode;
    /**
     * Enable room code filter when the the URL's room parameter is present
     */
    private enableRoomCodeFilter;
    /**
     * Indicates availability for a specific room extracted from the URL's room parameter
     */
    private roomCode;
    private startDate;
    private endDate;
    private promoOnly;
    private preUpsellRoomRate?;
    quoteDetails?: NonNullable<IBookingQuoteResponse>['rows'][number];
    pencilId?: string;
    checkoutDefaults?: Partial<UserProfile>;
    auxiliaryFilter?: {
        [id: string]: string | number;
    };
    /**
     *
     * @param rate - Optional `RoomRate` object associated with the basket row.
     * @param uniqId - Optional unique identifier for this basket row instance.
     * @param shouldEnableRoomCodeFilter - Whether to check the URL for a room code and enable filtering accordingly.
     *                                Defaults to `true`.
     */
    constructor(rate?: RoomRate, uniqId?: string, shouldEnableRoomCodeFilter?: boolean);
    getStale(): boolean;
    getRate(): RoomRate | null;
    getPromoCode(memberOnlyPromoCode?: string): string;
    getPromoOnly(): boolean;
    getPromoCodeColour(): Color.Success | Color.Alert | Color.Navy;
    isPromoCodeValid(): boolean | "";
    isManualInputPromoCode(): boolean;
    setManualInputPromoCode(value: boolean): void;
    getNumberOfDays(): number;
    getRoom(): Room;
    getStartDate(): dayjs.Dayjs;
    getEndDate(): dayjs.Dayjs;
    getArrivalDate(): string | null;
    getDepartureDate(): string | null;
    getStayDateRange(format?: string, separator?: string): string | undefined;
    /**
     * Ensures endDate is always at least 1 day after startDate.
     * Prevents invalid basket date ranges inherited from previous rows.
     */
    normalizeDateRange: () => void;
    getAdults(): number;
    getChildren(): number;
    getInfants(): number;
    getPreGuestsState(): {
        adults: number;
        children: number;
        infants: number;
        startDate: dayjs.Dayjs;
        endDate: dayjs.Dayjs;
    };
    getID(): string;
    getPromoCodeStatus(): EPromoCodeStatus;
    isValid(): boolean;
    setPromoCode(code: string): void;
    setPromoOnly(value: boolean): void;
    setStale(status: boolean): void;
    /**
     * Sets the promo code status and optionally a warning message.
     *
     * @param status - The new status: EPromoCodeStatus.
     * @param warningMessage - Optional warning message shown when status is 'invalid'.
     */
    setPromoCodeStatus(status: EPromoCodeStatus, warningMessage?: string): void;
    /**
     * Stores the warning message for an invalid promo code.
     *
     * @param message - The warning message to display.
     */
    private setPromoCodeWarningMessage;
    /**
     * Gets the stored warning message for the promo code.
     *
     * @returns The warning message as a string.
     */
    getPromoCodeWarningMessage(): string;
    /**
     * Returns the tooltip text based on the promo code status.
     *
     * - If status is EPromoCodeStatus.New: returns 'Checking' or 'No value'.
     * - If status is EPromoCodeStatus.Valid: returns 'Valid'.
     * - If status is EPromoCodeStatus.Invalid: returns the warning message.
     *
     * @param t - Translation function.
     * @param Translation - Translation object with tooltip message strings.
     * @returns Tooltip string to display.
     */
    getPromoCodeTooltip: (t: (arg0: string) => string, Translation: {
        Step: {
            Date: {
                PromoCodeTooltip: {
                    Checking: string;
                    NoValue: string;
                    Valid: string;
                    Invalid: string;
                };
            };
        };
    }) => string;
    setStartDate(date: dayjs.Dayjs): void;
    setEndDate(date: dayjs.Dayjs): void;
    setAdults(adults: number): void;
    setChildren(children: number): void;
    setInfants(infants: number): void;
    setPreGuestsState(): void;
    discardGuestsState(): void;
    setRate(rate: RoomRate | null, upsellEnabled?: boolean): void;
    private setPreUpsellRoomRate;
    getPreUpsellRoomRate(): RoomRate | undefined;
    getTotalPrice(getCost?: boolean): number | undefined;
    checkDiffFromReservation(res: ReservationDTO): false | BasketRowDifferences;
    setAuxiliaryFilter(value: {
        [id: string]: any;
    }): void;
    getAuxiliaryFilter(): {
        [id: string]: string | number;
    } | undefined;
    getEnableRoomCodeFilter(): boolean;
    setEnableRoomCodeFilter(enable: boolean): void;
    getRoomCode(): string;
    setRoomCode(roomCode: string): void;
}
