import { EMembershipProvider } from '@roomstay/core';
import { MembershipHandler } from '../../handlers/membership/MembershipHandler';
import type BasketRow from '../../models/BasketRow';
import type { Company } from '../../models/Client/Hotel/Company';
import type { Hotel } from '../../models/Client/Hotel/Hotel';
import { IPromotion } from '../../models/Promotion/IPromotion.type';
import type { Language } from '../../providers/LanguageProvider';
export type SignInUser = {
    saveState?: boolean;
    memberNumber?: string;
    memberProvider?: EMembershipProvider;
    firstName?: string;
    lastName?: string;
    email?: string;
};
export type CompanyContextType = Company & {
    selectedHotelID: string;
    memberOnlyModalPromotion: IPromotion | null;
    currentCurrency: string;
    currentLanguage: Language;
    signedInUser: SignInUser | null;
    memberProviderSigningIn: EMembershipProvider | null;
    updateLowestPricePerNight: (hotelId: string | Hotel, row: BasketRow) => void;
    changeHotel: (hotel: string | Hotel | null) => boolean;
    setCurrentCurrency: (currency: string) => void;
    setCurrentLanguage: (lang: Language) => void;
    closeMemberSignupModal: () => void;
    openMemberSignupModal: (provider?: EMembershipProvider) => void;
    signUserIn: (user: SignInUser) => Promise<void>;
    signUserOut: () => Promise<void>;
    /**
     * Returns information stored on the Hotel, also calls the API to fetch updated information from the Hotel if it's not been updated already
     *
     * @param hotelId
     * @returns
     */
    getHotel: (hotelId: string) => Promise<Hotel>;
    isExternalMemberHotel: boolean;
    externalMembershipHandlers: MembershipHandler[];
};
