declare global {
    interface Window {
        __NEXT_DATA__: any;
        [x: string]: any;
        dataLayer: {
            push: (obj: Record<string, any>) => void;
        };
    }
}
export declare enum PatientType {
    TEEN = "teen",
    ADULT = "adult",
    PARENT = "parent"
}
export declare enum ContactTime {
    MORNING = "morning",
    AFTERNOON = "afternoon",
    EVENING = "evening",
    NO_PREFERENCE = "no preference"
}
export declare enum SFDCPatientType {
    TEEN = "A teen",
    ADULT = "An adult",
    PARENT = "A parent (looking for my child)"
}
export declare enum ButtonStyleTypes {
    NORMAL = "normal",
    INPUT = "input",
    FINDER = "finder",
    CIRCLE = "circle"
}
export declare enum DocTypes {
    GENERAL = "general",
    ORTHO = "ortho"
}
export declare enum DocTypeLabel {
    GENERAL = "General Dentist",
    ORTHO = "Orthodontist",
    PERIATRIC = "Pediatric Dentist"
}
export declare enum DoclocStatuses {
    OK = "OK",
    SERVER_ERROR = "SERVER_ERROR",
    ZERO_RESULTS = "ZERO_RESULTS"
}
export declare enum DocLocViews {
    WELCOME = "welcome",
    RESULT = "result",
    DOC_PROFILE = "doctor"
}
export declare enum ResultViews {
    HOME = "home",
    SORT = "sort",
    FILTER = "filter",
    DOCTOR = "doctor"
}
export declare enum SortTypes {
    experience = "S1",
    distance = "S2",
    name = "S3",
    teen = "S4",
    itero = "S5"
}
export declare enum SortTypesTables {
    S1 = "best_match",
    S2 = "distance",
    S3 = "last_name",
    S4 = "teen",
    S5 = "itero"
}
export type KeySortTypes = 'experience' | 'distance' | 'name' | 'teen' | 'itero';
export declare enum Tiers {
    SAPPHIRE = "Sapphire",
    PEARL = "Pearl",
    VIP = "VIP",
    BLUE_DIAMOND_PLUS = "Blue Diamond Plus",
    BLUE_DIAMOND = "Blue Diamond",
    DIAMOND_PRO = "Diamond Pro",
    DIAMOND_PLUS = "Diamond Plus",
    DIAMOND = "Diamond",
    PLATINUM_PLUS = "Platinum Plus",
    PLATINUM = "Platinum",
    GOLD_PRO = "Gold Pro",
    GOLD_PLUS = "Gold Plus",
    GOLD = "Gold",
    SILVER_PLUS = "Silver Plus",
    SILVER = "Silver",
    BRONZE = "Bronze",
    BRONZE_PLUS = "Bronze Plus",
    EMERALD_ELITE = "Emerald Elite",
    EMERALD = "Emerald",
    DIAMOND_ELITE = "Diamond Elite",
    PLATINUM_ELITE = "Platinum Elite"
}
export type MobileProps = {
    isMobile?: boolean;
};
export type TooltipPosition = 'left' | 'right';
export type FilterElements = 'radio' | 'checkbox' | 'text';
export type FilterNames = keyof Filters;
export type BaseSortType<T> = {
    type: FilterElements;
    value?: T;
    label?: string;
    desc?: string;
    filterName?: FilterNames;
};
export type MobileFilter<T> = {
    options: BaseSortType<T>[];
    id?: 'doctorType';
    label?: string;
    filterName?: FilterNames;
};
export type ChangeView = (path: string | undefined, params: string, callback?: () => void) => void;
export type InitGoogleAutoComplete = (element_id: string, locale_id: string, callback: (arg0: {
    geometry?: google.maps.places.PlaceGeometry;
    formatted_address: string;
}) => void) => void;
export type GoogleAutoCompleteCallbackProps = {
    geometry?: google.maps.places.PlaceGeometry;
    formatted_address?: string;
};
export type APIResultResponse<T> = {
    result: T[];
};
export type LocatorDoctor = {
    AAOMember?: boolean;
    Accuracy?: string;
    AnnotationList?: string;
    City: string;
    Country?: string;
    Distance: number;
    DocID: number;
    DoctorType?: string;
    Fax?: string;
    FirstName?: string;
    FullName?: string;
    HasAdditionalLocations?: boolean;
    HasBio?: boolean;
    HasEmail?: boolean;
    IsCABMember?: boolean;
    IsFacultyMember?: boolean;
    IsItero?: boolean;
    IsTeenDoctor?: boolean;
    IsTeenGuarantee?: boolean;
    IsVip: boolean;
    ThirdPartyFinancing?: boolean;
    LastName?: string;
    Latitude?: number;
    Line1: string;
    Line2: string;
    Line3?: string;
    Line4?: string;
    Longitude?: number;
    LicenseNumber?: string;
    Num?: number;
    OfficePhone?: string;
    Phone?: string;
    PostalCode: string;
    SegmentCode: number;
    State: string;
    PracticeName: string;
    PreferredName: string;
    Url?: string;
    ProfilePhoto?: string;
    Project?: string;
    IsShown?: boolean;
    SpecialPrograms?: string[];
    IsSwift?: boolean;
    SwiftDetails?: any;
    IsVivera?: boolean;
    VFlag?: number;
    OLSInfo?: any;
    HasOLS?: boolean;
    IsWhiteningProvider?: boolean;
    IsCloud9Provider?: boolean;
    CID?: string;
    InvisalignFirst?: boolean;
    Mandibular?: boolean;
    VirtualAppointment?: boolean;
    OnlineScheduleUrl?: string | null;
    ExternalOnlineScheduleUrl?: string | null;
    IsDSO?: boolean;
    CorporatePartner?: string[];
    InsuranceCarriers?: string[];
    error?: string;
    InstagramURL?: string;
    WhatsAppNumber?: string;
    facebook_url?: string;
    twitter_url?: string;
    youtube_url?: string;
    IsLendCare?: boolean;
    IsHeartLandOLS?: boolean;
    IsHfdPrequal?: boolean;
    HfdPrequalUrl?: string;
    IsIec?: boolean;
    DynamicPrograms: {
        is_iec: 't' | 'f';
        is_zocdoc: 't' | 'f';
        is_hfd_prequal: 't' | 'f';
        is_wellness_ecard: 't' | 'f';
        is_nexhealth: 't' | 'f';
    };
};
export type DoctorPhoto = {
    filename: {
        url: string;
    };
};
export type DoctorSubEntry = {
    id: number;
    name: string;
    global: boolean;
    created_at: string;
    updated_at: string;
    details: Record<string, string>;
};
export type DoctorOffice = {
    location_id: number;
    email: string;
    notes: string;
    hide_office_hours: boolean;
    office_hours: {
        closed: string;
        from?: string;
        to?: string;
    }[];
    address: string;
    phone: string;
    photo: DoctorPhoto;
    office_video: string;
    multiple_office_photos: string[];
    practice_name: string;
    extend_office_hours: boolean;
    preferred_name?: string;
};
export type DSOPracticeInfo = {
    location_id: number;
    name: string;
    education: DoctorSubEntry[];
    photo: string;
    doctor_type: string;
};
export type DoctorProfileBio = {
    offices: DoctorOffice[];
    photo: DoctorPhoto;
    biography: string;
    specialties: DoctorSubEntry[];
    associations: any;
    educations: DoctorSubEntry[];
    reviews: DoctorSubEntry[];
    facebook_url?: string;
    instagram_url?: string;
    twitter_url?: string;
    youtube_url?: string;
    whatsapp_number?: string;
    foursquare_url: string;
    insurance_types: DoctorSubEntry[];
    payment_methods: DoctorSubEntry[];
    languages: [];
    office_experiences: DoctorSubEntry[];
};
export type DoctorProfile = {
    location_id: number;
    preferred_name: string;
    first_name: string;
    last_name: string;
    FullName?: string;
    aao_member: boolean;
    display_name: string;
    advantage_level: number;
    doctor_type: string;
    teen: boolean;
    faculty: boolean;
    cab: boolean;
    line1: string;
    line2: string;
    line3: string;
    line4: string;
    postal_code: string;
    city: string;
    state: string;
    country: string;
    longitude: number;
    latitude: number;
    license_number?: string;
    email: string;
    url: string;
    phone: string;
    fax: string;
    itero: boolean;
    is_apple: boolean;
    practice_name: string;
    practice_name2: string;
    is_vip: boolean;
    is_mandibular: boolean;
    is_invisalign_first: boolean;
    external_online_scheduling_url: string;
    loan_hero: boolean;
    bio: DoctorProfileBio;
    dso_practice_info: DSOPracticeInfo[];
    corporate_partner: string[];
    is_swift: boolean;
    swift_details: any;
    is_dso: boolean;
    is_vivera: boolean;
    ols_info: any[];
    has_ols: boolean;
    is_whitening_provider: boolean;
    status?: number;
    is_lendcare?: boolean;
    is_heartland_ols?: boolean;
    is_ipe?: boolean;
    is_click_to_call_pcs?: boolean;
    is_hfd_prequal?: boolean;
    hfd_prequal_url?: string;
    is_iec?: boolean;
    dynamic_programs: {
        is_iec?: 't' | 'f';
        is_zocdoc?: 't' | 'f';
        is_hfd_prequal?: 't' | 'f';
        is_wellness_ecard?: 't' | 'f';
    };
};
export type AppointmentFormType = {
    patientType: PatientType;
    firstName: string;
    lastName: string;
    dateOfBirth: string;
    zip: string;
    mobile: string;
    email: string;
    comments: string;
    alignInfoAgreed: boolean;
    alignInfoAgreed2: boolean;
    preferredContactTime: ContactTime;
};
export type Appointment = {
    docID: number;
    firstName: string;
    lastName: string;
    email: string;
    comments: string;
    ageGroup: SFDCPatientType.TEEN | SFDCPatientType.ADULT | SFDCPatientType.PARENT;
    phone: string;
    zip: string;
    age: string;
    leadSource: 'Doc Locator' | 'Vivera Doctor Locator' | '';
    optin: boolean;
    vid: string;
    stage_in_funnel__c: 'Low' | 'Mid' | 'Top';
    minutes_on_site: string;
    sub_lead_source?: string;
    optin2?: boolean;
    preferred_contact_time?: ContactTime;
};
export type AppointmentFormCookie = {
    submitted: boolean;
    profileIds: string[];
};
export type FormFilters = {
    zip: string;
    patientType: PatientType.ADULT | PatientType.TEEN;
    isOrthoDoc: boolean;
    isGeneralDoc: boolean;
    isPediatric: boolean;
    vivera: boolean;
    whitening: boolean;
    radius: string;
    tier: number;
    address: string;
    city: string;
    state: string;
    doctorName: string;
    sortType: SortTypes;
    flan: string[];
    fpinsurance: string[];
    fservice: string[];
    fehours: string;
    treatments: {
        vivera_retainers?: boolean;
        whitening?: boolean;
        ipe?: boolean;
        itero?: boolean;
        invisalign_first?: boolean;
        program?: string;
        aohs?: boolean;
    };
    trt: string;
    svc: string;
    program: string;
};
export interface Filters extends FormFilters {
    token?: string;
    sessionId: string;
    visitorId: string;
    apiVersion?: ApiVersionParameter;
    countryList?: string;
    implementation?: ImplementationParameter;
    longitude?: string;
    latitude?: string;
    preset?: PresetParameter;
    radiusIncrement?: string;
    partner?: string;
    lat?: string;
    lng?: string;
    program: string;
}
export type SearchApiFilters = {
    rd: string;
    rdi: string;
    it: ImplementationParameter;
    pst: PresetParameter;
    vid: string;
    sid: string;
    lat: string;
    lng: string;
    fn?: string;
    f?: string;
    s: string;
    pc?: string;
    usa?: string;
    ust?: string;
    uct?: string;
    token?: string;
    av?: ApiVersionParameter;
    flan?: string;
    fpinsurance?: string;
    fp?: string;
    fservice?: string;
    fehours?: string;
    svc?: string;
    cid?: string;
    cl?: string;
    mtcc?: string;
    mrd?: string;
    method?: string;
    fdp?: string;
    _?: string;
};
export type Response = {
    isViveraZipCode: boolean;
    addressNumber: number;
    effectiveRadius: number;
    geocodeData: any;
    results: LocatorDoctor[];
};
export type ApiResponse = {
    responseData: Response;
    responseDetails: any;
    responseStatus: number;
};
export type SearchReturnType = {
    results: LocatorDoctor[];
    effectiveRadius?: number;
};
export type LogTypes = 'Unknown' | 'InvalidAddress' | 'ServerError' | 'NoResults' | 'ResultsLoad' | 'PageView' | 'AdditionalLocations' | 'DetailsShow' | 'UrlOpen' | 'BioOpen' | 'EmailSend';
export type DoctorApiFilters = {
    id: string;
    token?: string;
};
export type ExtraQueryParamsType = {
    profile: string;
    requestAppointment?: string;
    lan?: string;
    sortType?: string;
};
export type QueryParamsType = Partial<Filters> & ExtraQueryParamsType;
export type PresetParameter = '3' | '2' | '1';
export type ApiVersionParameter = 'dcc' | 'nl' | 'nl2';
export type ImplementationParameter = 'us' | 'us2' | 'us3' | 'br2' | 'cl' | 'mx';
export type BaseOption = {
    label: string;
    value: string;
    id?: string;
};
export type ZipLatLng = {
    lat: number;
    lng: number;
    address?: string;
};
export type Address = {
    addressComponent: {
        long_name: string;
        short_name: string;
        types: string[];
    }[];
    address: string;
};
export type CacheKeys = 'search';
export type TimeType = `${string}:${string}:${string}:${string}`;
export type TimeObj = {
    hours: number;
    minutes: number;
    seconds: number;
    ms: number;
};
export type SendAppointment = (form: Appointment) => Promise<any>;
export type CheckCaptchaProps = {
    token: string;
    captcha_action?: string;
};
export type TierPins = {
    id?: string;
    label: string;
    imgUrl: string;
    segmentCode: number;
    filterValue?: string;
};
export type RecaptchaTokenActionType = 'hc' | 'hp' | 'bt' | 'ms' | 'ts';
