import { GetBookingType } from '../lib/get-booking';
import { BookerState, BookerLayout } from './types';
declare const _iso_3166_1_alpha_2_codes: readonly ["ad", "ae", "af", "ag", "ai", "al", "am", "ao", "aq", "ar", "as", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bl", "bm", "bn", "bo", "bq", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "cr", "cu", "cv", "cw", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "ee", "eg", "eh", "er", "es", "et", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mf", "mg", "mh", "mk", "ml", "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv", "mw", "mx", "my", "mz", "na", "nc", "ne", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "ss", "st", "sv", "sx", "sy", "tc", "td", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tr", "tt", "tv", "tw", "tz", "ua", "ug", "um", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "ye", "yt", "za", "zm", "zw"];
export type CountryCode = (typeof _iso_3166_1_alpha_2_codes)[number];
/**
 * Arguments passed into store initializer, containing
 * the event data.
 */
export type StoreInitializeType = {
    username: string;
    eventSlug: string;
    eventId: number | undefined;
    layout: BookerLayout;
    month?: string;
    bookingUid?: string | null;
    isTeamEvent?: boolean;
    bookingData?: GetBookingType | null | undefined;
    verifiedEmail?: string | null;
    rescheduleUid?: string | null;
    rescheduledBy?: string | null;
    seatReferenceUid?: string;
    durationConfig?: number[] | null;
    org?: string | null;
    isInstantMeeting?: boolean;
    timezone?: string | null;
    teamMemberEmail?: string | null;
    crmOwnerRecordType?: string | null;
    crmAppSlug?: string | null;
    crmRecordId?: string | null;
    isPlatform?: boolean;
    allowUpdatingUrlParams?: boolean;
    defaultPhoneCountry?: CountryCode;
};
type SeatedEventData = {
    seatsPerTimeSlot?: number | null;
    attendees?: number;
    bookingUid?: string;
    showAvailableSeatsCount?: boolean | null;
};
export type BookerStore = {
    /**
     * Event details. These are stored in store for easier
     * access in child components.
     */
    username: string | null;
    eventSlug: string | null;
    eventId: number | null;
    /**
     * Verified booker email.
     * Needed in case user turns on Requires Booker Email Verification for an event
     */
    verifiedEmail: string | null;
    setVerifiedEmail: (email: string | null) => void;
    /**
     * Verification code for email verification.
     * Stored after successful verification to be included in booking request
     */
    verificationCode: string | null;
    setVerificationCode: (code: string | null) => void;
    /**
     * Current month being viewed. Format is YYYY-MM.
     */
    month: string | null;
    setMonth: (month: string | null) => void;
    /**
     * Current state of the booking process
     * the user is currently in. See enum for possible values.
     */
    state: BookerState;
    setState: (state: BookerState) => void;
    /**
     * The booker component supports different layouts,
     * this value tracks the current layout.
     */
    layout: BookerLayout;
    setLayout: (layout: BookerLayout) => void;
    /**
     * Date selected by user (exact day). Format is YYYY-MM-DD.
     */
    selectedDate: string | null;
    setSelectedDate: (params: {
        date: string | null;
        omitUpdatingParams?: boolean;
        preventMonthSwitching?: boolean;
    }) => void;
    addToSelectedDate: (days: number) => void;
    /**
     * Multiple Selected Dates and Times
     */
    selectedDatesAndTimes: {
        [key: string]: {
            [key: string]: string[];
        };
    } | null;
    setSelectedDatesAndTimes: (selectedDatesAndTimes: {
        [key: string]: {
            [key: string]: string[];
        };
    }) => void;
    /**
     * Multiple duration configuration
     */
    durationConfig: number[] | null;
    /**
     * Selected event duration in minutes.
     */
    selectedDuration: number | null;
    setSelectedDuration: (duration: number | null) => void;
    /**
     * Selected timeslot user has chosen. This is a date string
     * containing both the date + time.
     */
    selectedTimeslot: string | null;
    setSelectedTimeslot: (timeslot: string | null) => void;
    tentativeSelectedTimeslots: string[];
    setTentativeSelectedTimeslots: (slots: string[]) => void;
    /**
     * Number of recurring events to create.
     */
    recurringEventCount: number | null;
    setRecurringEventCount(count: number | null): void;
    /**
     * Input occurrence count.
     */
    recurringEventCountQueryParam: number | null;
    setRecurringEventCountQueryParam(count: number | null): void;
    /**
     * The number of days worth of schedules to load.
     */
    dayCount: number | null;
    setDayCount: (dayCount: number | null) => void;
    /**
     * If booking is being rescheduled or it has seats, it receives a rescheduleUid with rescheduledBy or bookingUid
     * the current booking details are passed in. The `bookingData`
     * object is something that's fetched server side.
     */
    rescheduleUid: string | null;
    setRescheduleUid: (rescheduleUid: string | null) => void;
    rescheduledBy: string | null;
    bookingUid: string | null;
    bookingData: GetBookingType | null;
    setBookingData: (bookingData: GetBookingType | null | undefined) => void;
    /**
     * Method called by booker component to set initial data.
     */
    initialize: (data: StoreInitializeType) => void;
    /**
     * Stored form state, used when user navigates back and
     * forth between timeslots and form. Gets cleared on submit
     * to prevent sticky data.
     */
    formValues: Record<string, any>;
    setFormValues: (values: Record<string, any>) => void;
    /**
     * Force event being a team event, so we only query for team events instead
     * of also include 'user' events and return the first event that matches with
     * both the slug and the event slug.
     */
    isTeamEvent: boolean;
    seatedEventData: SeatedEventData;
    setSeatedEventData: (seatedEventData: SeatedEventData) => void;
    isInstantMeeting?: boolean;
    org?: string | null;
    setOrg: (org: string | null | undefined) => void;
    timezone: string | null;
    setTimezone: (timezone: string | null) => void;
    teamMemberEmail?: string | null;
    crmOwnerRecordType?: string | null;
    crmAppSlug?: string | null;
    crmRecordId?: string | null;
    isPlatform?: boolean;
    allowUpdatingUrlParams?: boolean;
    defaultPhoneCountry?: CountryCode | null;
    /**
     * Whether the two-step slot selection modal/dialog is visible
     */
    isSlotSelectionModalVisible: boolean;
    setIsSlotSelectionModalVisible: (visible: boolean) => void;
};
/**
 * Creates a new booker store instance
 */
export declare const createBookerStore: () => import('zustand/traditional').UseBoundStoreWithEqualityFn<import('zustand').StoreApi<BookerStore>>;
/**
 * Default global store instance for backward compatibility
 */
export declare const useBookerStore: import('zustand/traditional').UseBoundStoreWithEqualityFn<import('zustand').StoreApi<BookerStore>>;
export declare const useInitializeBookerStore: ({ username, eventSlug, month, eventId, rescheduleUid, rescheduledBy, bookingData, verifiedEmail, layout, isTeamEvent, durationConfig, org, isInstantMeeting, timezone, teamMemberEmail, crmOwnerRecordType, crmAppSlug, crmRecordId, isPlatform, allowUpdatingUrlParams, defaultPhoneCountry, }: StoreInitializeType) => void;
export {};
//# sourceMappingURL=store.d.ts.map