import { CancellationPolicyApi } from './CancellationPolicyApi';
import { ContactPersonApi } from './ContactPersonApi';
import { CurrencyClient } from './CurrencyClient';
import { EventApi } from './EventApi';
import { HotelRoomOfferApi } from './HotelRoomOfferApi';
import { HotelRoomingListApi } from './HotelRoomingListApi';
import { InvoiceApi } from './InvoiceApi';
import { PaymentMethodApi } from './PaymentMethodApi';
import { SourceMarket } from './SourceMarket';
import { TaxApi } from './TaxApi';
/**
 * Booking record
 * @export
 * @interface BookingApi
 */
export interface BookingApi {
    /**
     * Additional instructions on how to check-in.
     * @type {string}
     * @memberof BookingApi
     */
    additionalCheckInInstruction?: string | null;
    /**
     * Additional house policy, house manual, or condominium rules.
     * @type {string}
     * @memberof BookingApi
     */
    additionalPolicies?: string | null;
    /**
     * The total number of adults who will be staying in the property.
     * @type {number}
     * @memberof BookingApi
     */
    adultCount: number;
    /**
     * Date of booking cancellation request, when applicable.
     * @type {string}
     * @memberof BookingApi
     */
    canceledAt?: string | null;
    /**
     * The list of cancellation policy date range with their corresponding penalty percentage.
     * @type {Array<CancellationPolicyApi>}
     * @memberof BookingApi
     */
    cancellationPolicies: Array<CancellationPolicyApi>;
    /**
     * Remarks about the cancellation policy.
     * @type {string}
     * @memberof BookingApi
     */
    cancellationPolicyRemarks?: string | null;
    /**
     * Date of check-in formatted as YYYY-MM-DD.
     * @type {string}
     * @memberof BookingApi
     */
    checkInDate: string;
    /**
     * Date of check-out formatted as YYYY-MM-DD.
     * @type {string}
     * @memberof BookingApi
     */
    checkOutDate: string;
    /**
     * A comma-separated list of child ages (0 up to 17). e.g.: "3,7" represents 2 children respectively 3 and 7 years old.
     * @type {string}
     * @memberof BookingApi
     */
    children?: string | null;
    /**
     * Date of booking confirmation request, when applicable.
     * @type {string}
     * @memberof BookingApi
     */
    confirmedAt?: string | null;
    /**
     *
     * @type {ContactPersonApi}
     * @memberof BookingApi
     */
    contactPerson: ContactPersonApi;
    /**
     * Creation date of the **Booking**.
     * @type {string}
     * @memberof BookingApi
     */
    createdAt: string;
    /**
     *
     * @type {CurrencyClient}
     * @memberof BookingApi
     */
    currency: CurrencyClient;
    /**
     * Customer Reference of the requested Booking (sometimes to present by the customer at hotel check-in).
     * @type {string}
     * @memberof BookingApi
     */
    customerReference?: string | null;
    /**
     *
     * @type {EventApi}
     * @memberof BookingApi
     */
    event?: EventApi | null;
    /**
     * Date of booking failure, when applicable.
     * @type {string}
     * @memberof BookingApi
     */
    failedAt?: string | null;
    /**
     * Code your guest might need to show to the hotel during check-in. This number will only but available a few days prior to check-in and it’s subject to availability.
     * @type {string}
     * @memberof BookingApi
     */
    hotelConfirmationId?: string | null;
    /**
     * Hotel Id of the requested Booking.
     * @type {string}
     * @memberof BookingApi
     */
    hotelId: string;
    /**
     *
     * @type {HotelRoomOfferApi}
     * @memberof BookingApi
     */
    hotelRoomOffer: HotelRoomOfferApi;
    /**
     * Hotel rooming lists of a hotel booking
     * @type {Array<HotelRoomingListApi>}
     * @memberof BookingApi
     */
    hotelRoomingLists?: Array<HotelRoomingListApi>;
    /**
     * Booking Id
     * @type {string}
     * @memberof BookingApi
     */
    id?: string | null;
    /**
     * The list of invoices and credit notes (when applicable) direct urls associated to the Booking.
     * @type {Array<InvoiceApi>}
     * @memberof BookingApi
     */
    invoices?: Array<InvoiceApi> | null;
    /**
     * Date of the last booking status update.
     * @type {string}
     * @memberof BookingApi
     */
    lastStatusUpdatedAt: string;
    /**
     * You can use this parameter to attach key-value data to bookings. Metadata is useful for storing additional, structured information on a booking. As an example, you could store your user's full name and corresponding unique identifier from your system on a booking. Metadata is not used internally by the Booking Engine and won't be seen by your users unless you choose to show it to them.
     * @type {{ [key: string]: string; }}
     * @memberof BookingApi
     */
    metadata?: {
        [key: string]: string;
    } | null;
    /**
     * Booking Pay Later Status
     * @type {string}
     * @memberof BookingApi
     */
    payLater?: BookingApiPayLaterEnum;
    /**
     * List of preferred payment methods to be used along with their respective payload (when applicable) in order to fulfill the booking.
     *
     * ⚠️ This field is only returned when **booking.status = bkg-created**
     * @type {Array<PaymentMethodApi>}
     * @memberof BookingApi
     */
    paymentMethods?: Array<PaymentMethodApi>;
    /**
     * Penalty percentage of the requested Booking.
     *
     *  When **booking.status = bkg-cx** this is the percentage of the **booking.tax_included_price** that have been charged on the canceled booking. Otherwise, this field won't be returned.
     * @type {number}
     * @memberof BookingApi
     */
    penaltyPercentage?: number | null;
    /**
     * Booking Reference of the requested Booking.
     * @type {string}
     * @memberof BookingApi
     */
    reference: string;
    /**
     *
     * @type {SourceMarket}
     * @memberof BookingApi
     */
    sourceMarket: SourceMarket;
    /**
     * Booking status. Please, refer to [Booking Status](/v1/documentation#tag/Booking-Status) for details.
     * @type {string}
     * @memberof BookingApi
     */
    status: BookingApiStatusEnum;
    /**
     * Total tax amount expressed in the booking currency.
     * @type {number}
     * @memberof BookingApi
     */
    taxAmount: number;
    /**
     * Price of the booking including taxes expressed in the booking currency.
     * @type {number}
     * @memberof BookingApi
     */
    taxIncludedPrice: number;
    /**
     *
     * @type {Array<TaxApi>}
     * @memberof BookingApi
     */
    taxes?: Array<TaxApi> | null;
    /**
     * Link to Revolugo terms and conditions under which the booking is made.
     * @type {string}
     * @memberof BookingApi
     */
    terms: string;
    /**
     * This is the token to pass as URL params to [Cancel Booking endpoint](/v1/documentation#operation/deleteV1BookingsId) in order to perform a cancel request on the booking. If you want to cancel a booking, you should use this token instead of the booking id.
     *
     * ⚠️ For security reasons, this token is unique and once generated, it is valid during a period of 10 minutes.
     *
     * In order to get a fresh valid token you need to call **[Retrieve Booking endpoint](/v1/documentation#operation/getV1BookingsId)**.
     * @type {string}
     * @memberof BookingApi
     */
    token?: string | null;
}
/**
 * @export
 */
export declare const BookingApiPayLaterEnum: {
    readonly Disabled: "DISABLED";
    readonly Enabled: "ENABLED";
    readonly Forced: "FORCED";
};
export type BookingApiPayLaterEnum = typeof BookingApiPayLaterEnum[keyof typeof BookingApiPayLaterEnum];
/**
 * @export
 */
export declare const BookingApiStatusEnum: {
    readonly Cx: "bkg-cx";
    readonly Cf: "bkg-cf";
    readonly Created: "bkg-created";
    readonly Af: "bkg-af";
    readonly Ip: "bkg-ip";
    readonly Pc: "bkg-pc";
    readonly Pp: "bkg-pp";
    readonly Qr: "bkg-qr";
};
export type BookingApiStatusEnum = typeof BookingApiStatusEnum[keyof typeof BookingApiStatusEnum];
/**
 * Check if a given object implements the BookingApi interface.
 */
export declare function instanceOfBookingApi(value: object): boolean;
export declare function BookingApiFromJSON(json: any): BookingApi;
export declare function BookingApiFromJSONTyped(json: any, ignoreDiscriminator: boolean): BookingApi;
export declare function BookingApiToJSON(value?: BookingApi | null): any;
