import { IBookingExtraFields, IBookingPayment, IBookingQuoteRequest, IBookingQuoteResponse, IGiftCardPreauthorisationDTO, IPencilReservationRequest, IPencilReservationResponse, ReservationsDTO } from '@roomstay/core';
import BaseAPI from './BaseAPI';
import BasketAddonRow from '../models/BasketAddonRow';
import BasketRow from '../models/BasketRow';
import { IRoomstayMemberBooking } from '../models/RoomstayMembers/IRoomstayMemberBooking';
import UserProfile from '../models/UserProfile';
export declare enum EPaymentMethod {
    PLANPAY = "Planpay",
    CARD = "Card"
}
export default class ReservationAPI extends BaseAPI {
    private storedReservations;
    /**
     * Populates a booking quote request.
     */
    buildQuoteRequest: (rows: BasketRow[], memberNumber?: string) => IBookingQuoteRequest;
    /**
     * Populates a pencil reservation request based on a quote request.
     */
    buildPencilRequest: (rows: BasketRow[], memberNumber?: string, pencilId?: string) => IPencilReservationRequest;
    /**
     * Generates a unique query ID string based on basket row data.
     * This ID is used to detect changes and re-fetch deposit quotes during checkout.
     */
    buildQuoteQueryID: (rows: BasketRow[], memberNumber?: string) => string;
    /**
     * Returns a quote for the given
     */
    getPriceQuote: (hotelId: string, rows: BasketRow[], memberNumber?: string) => Promise<IBookingQuoteResponse>;
    /**
     * Pencils a reservation for the given rooms. Returns the timeout, and quote if applicable.
     */
    pencilReservation: (hotelId: string, rows: BasketRow[], memberNumber?: string, pencilId?: string) => Promise<IPencilReservationResponse>;
    /**
     *
     * @param basketRows
     * @param userProfiles
     * @param payment
     * @param addonRows
     * @param comments
     * @param hotelId
     * @param sessionId
     * @param specialReq
     * @returns
     */
    bookNow: (basketRows: BasketRow[], userProfiles: UserProfile[], payment: IBookingPayment, addonRows: BasketAddonRow[], comments: string, hotelId: string, sessionId: string, pencilId?: string | undefined, specialReq?: string | undefined, retryPayment?: boolean, roomstayId?: string | undefined, memberNumber?: string | undefined, giftCardPreauth?: IGiftCardPreauthorisationDTO | undefined, extraFields?: IBookingExtraFields) => Promise<ReservationsDTO>;
    commit: (reservations: string[], itineraryId: string, hotelId: string, planpayCheckoutId?: string, paymentId?: string) => Promise<ReservationsDTO>;
    rollback: (reservations: string[], itineraryId: string, hotelId: string) => Promise<boolean>;
    cancelReservation: (id: string, email: string, hotelId: string) => Promise<boolean>;
    findReservation: (id: string, email: string, hotelId: string) => Promise<ReservationsDTO>;
    linkBookingToMember: (hotelId: string, reservationId: string, reservationEmail: string) => Promise<{
        message: string;
        booking: IRoomstayMemberBooking;
    }>;
}
