import { ReservationDTO, ReservationsDTO } from '@roomstay/core';
import { Dayjs } from 'dayjs';
import BasketAddonRow from '../models/BasketAddonRow';
import BasketRow from '../models/BasketRow';
import { ConfigCompany } from '../models/Client/Hotel/Company';
import { Room } from '../models/Room/Room';
import { RoomRate } from '../models/Room/RoomRate';
import { Hotel } from '..';
import { Analytics } from './Analytics/Analytics';
export declare enum DatalayerAnalyticsMode {
    UniversalAnaltics = "UniversalAnalytics",
    GoogleAnalytics4 = "GoogleAnalytics4"
}
export type GenericAnalyticsAccommodation = {
    room: Room;
    dateRange: {
        from: Dayjs;
        to: Dayjs;
    };
    rate?: RoomRate;
    quantity?: number;
    promoCode?: string;
    /**
     * What the original room rate was before the upsell
     */
    originalRoomRate?: RoomRate;
    basketAddonRow?: BasketAddonRow;
};
export interface DateRange {
    from: Dayjs;
    to: Dayjs;
}
export default class DataLayer {
    static instance: DataLayer;
    private enableLogging;
    private originalCurrencyCode?;
    private currentCurrencyCode;
    private impressions;
    private hotel?;
    private company?;
    initialiseGTM(company: ConfigCompany, hotel?: Hotel): void;
    setAnalyticsMode(mode: Analytics): void;
    setItemListName(itemListName?: string): void;
    setCurrencyCodes(currentCurrencyCode: string, originalCurrencyCode?: string): void;
    setUserId: (id?: string) => this;
    addRoomImpression(room: Room, dateRange: DateRange, promoCode: string): void;
    addRoomRateImpression(room: Room, rate: RoomRate, dateRange: DateRange, promoCode: string): void;
    sendRoomImpressions(): void;
    sendRoomClick(room: Room, startDate: Dayjs, endDate: Dayjs, promoCode?: string): void;
    sendAwayWindowOpen(): void;
    sendRoomRateAddToCart(rate: RoomRate, quantity: number, startDate: Dayjs, endDate: Dayjs, originalRoomRate?: RoomRate): void;
    sendRoomAddonAddToCart(basketAddonRow: BasketAddonRow, quantity: number, startDate: Dayjs, endDate: Dayjs): void;
    sendUpsellConfirmed(dateRange: DateRange, oldRate: RoomRate, newRate: RoomRate): void;
    sendUpsellCancelled(dateRange: DateRange, rate: RoomRate): void;
    sendRoomView(startDate: Dayjs, endDate: Dayjs): void;
    sendCheckoutView(basketRows: BasketRow[], addonRows: BasketAddonRow[]): void;
    sendReservationConfirmed(basketRows: BasketRow[], addonRows: BasketAddonRow[], reservations: ReservationsDTO): void;
    sendCancellation(reservation: ReservationDTO): void;
    sendCancellationByReservationNumber(reservationNumber: string): void;
    sendInteraction(name: string, type: InteractionType, step: InteractionStep): void;
    sendDateSelection({ startDate, endDate, adult, children, infant }: {
        startDate: Dayjs;
        endDate: Dayjs;
        adult?: number;
        children?: number;
        infant?: number;
    }): void;
    sendMemberSignUp(): void;
    sendMemberSignedIn(): void;
    protected log(...output: any): void;
}
export declare enum InteractionType {
    NUMBER_INPUT = "+-widget",
    CALENDAR = "Calendar",
    BUTTON = "Button",
    DROPDOWN = "Dropdown",
    LINK_DROPDOWN = "Link dropdown",
    LINK = "Link",
    FORM_FIELD = "Form field",
    CHECKBOX = "Checkbox"
}
export declare enum InteractionStep {
    DATES = "Dates",
    ROOMS = "Rooms",
    GUEST_DETAILS = "Guest Details"
}
