import { HotelRoomDTO } from '../Api/HotelDTO';
import { ConfigHotel, Hotel } from '../Client/Hotel/Hotel';
import { HotelPerk } from '../Client/Hotel/HotelPerk';
import { IRoomRate, RoomRate, RoomRatePriceInclusion } from './RoomRate';
import RoomRateSortable from './RoomRateSortable';
import { Serializable } from '../Serializable';
export interface IRoom {
    id: number;
    code: string;
    name: string;
    longDescription: string;
    shortDescription: string;
    occupancy: number;
    images: string[];
    rates: IRoomRate[];
    roomGroupId?: string;
    auxiliaryValues: {
        [key: string]: (string | number)[];
    };
    order: number;
    prePerkDisclaimer?: string;
    perks?: ConfigHotel['perks'];
    doNotUpsell: boolean;
}
export declare class Room implements RoomRateSortable, Serializable<Room, IRoom> {
    id?: number;
    code?: string;
    name?: string;
    longDescription?: string;
    shortDescription?: string;
    occupancy?: number;
    images: string[];
    roomGroupId?: string;
    auxiliaryValues?: {
        [key: string]: (string | number)[];
    };
    filteredRates?: RoomRate[];
    private rates;
    order?: number;
    prePerkDisclaimer?: string;
    perks?: ConfigHotel['perks'];
    doNotUpsell: boolean;
    extraDetails?: HotelRoomDTO;
    constructor(props?: Partial<IRoom>);
    static fromData(data: any): Room;
    getShortDescription(trim?: boolean): string | undefined;
    getLongDescription(): string | undefined;
    applyData(data: Partial<IRoom>): void;
    getLowestPriceType: (raw?: boolean) => RoomRatePriceInclusion;
    getLowestPrice(raw?: boolean, rawPrice?: boolean): number;
    /**
     * Function for getting the lowest total price of the room from all the possible rates.
     * @param includeAllRates If set to true will include all rates, otherwise will only include filtered rates
     * @param getCost If set to true will return the cost of the rate, otherwise will return the average price see {@link RoomRate.getTotalPrice}
     * @returns
     */
    getLowestTotalPrice(includeAllRates?: boolean, getCost?: boolean): number;
    getHighestPrice(raw?: boolean): number;
    addRate(rate: RoomRate): void;
    getImages(): string[];
    getOriginalRates(): RoomRate[];
    getRates(): RoomRate[];
    getRate(code: string): RoomRate | null;
    getPriceSortValue(): number;
    getRecommendedSortValue(): number | undefined;
    getOrderSortValue(): number | undefined;
    serialize(): IRoom;
    unSerialize(data: IRoom): this;
    getRoomPerks({ hotel, room, perksLimitNumber }: {
        hotel?: Hotel;
        room?: Room;
        perksLimitNumber?: number;
    }): {
        prePerkDisclaimer?: string;
        roomPerks: HotelPerk[];
    };
    isAvailable(): boolean;
}
