import { AppointmentFormType, ChangeView, DocLocViews, DoctorProfile, Filters, KeySortTypes, LocatorDoctor, TimeType, ZipLatLng, CacheKeys, SendAppointment, TierPins, AppointmentFormCookie, SearchApiFilters, InitGoogleAutoComplete, FilterElements } from 'src/lib/types/types';
export type SearchState = {
    result: LocatorDoctor[];
    isLoading: boolean;
    error: any;
    isDirect: boolean;
    address: string;
    effectiveRadius?: number;
    startedAt?: string;
    hasSearched: boolean;
};
export type DoctorState = {
    result: DoctorProfile | undefined;
    isLoading: boolean;
    scheduleLoading: boolean;
    appointment: AppointmentFormType;
    error: any;
};
export type FilterState = {
    filters: Filters;
    landingFilters: Partial<Filters>;
    resultFilters: Partial<Filters>;
};
export type CountryData = {
    countryList: string;
    locales: string[];
    distUnit: string;
    shortDistUnit: string;
    defaultRadiusIncrement: string;
    query_param_profile?: string;
    geoCountry?: string;
    apiDistUnit?: string;
};
export type SocialIcons = {
    whatsappLabel?: string;
    instagramLabel?: string;
    facebookLabel?: string;
    twitterLabel?: string;
    youtubeLabel?: string;
};
export type RadiusOptions = {
    label: string;
    value: string;
}[];
export type HashEmailAndPhone = 'true' | 'false';
export type ModalData = {
    id: string;
    title: string;
    description: string;
    footnote?: string;
    size?: 'sm' | 'lg';
    image?: string;
    width?: 'sm' | 'lg';
};
export type Config = {
    country: string;
    language: string;
    tokenApiUrl: string;
    tokenClientId: string;
    tokenClientSecret: string;
    radiusSvcUrl: string;
    logSvcUrl: string;
    doctorSvcUrl: string;
    appointmentSvcUrl: string;
    checkCaptchaUrl: string;
    recaptchaKey: string;
    googleKey: string;
    implementationType: 'us' | 'us2' | 'us3' | 'br2' | 'cl' | 'mx';
    defaultSort: KeySortTypes;
    showIteroSort: boolean;
    defaultVivera: boolean;
    formatResultPhone: boolean;
    recaptchaPromiseDelay: number;
    resultsPerPage: number;
    paginationLimit: number;
    useInfiniteScrollOnResults: boolean;
    useInfiniteScrollWithButtonOnWeb: boolean;
    useInfiniteScrollWithButtonOnMobile: boolean;
    skipWelcome: boolean;
    stickyMap: boolean;
    fadFromNav: boolean;
    universalFadSearch: boolean;
    doctorLocatorUrl: string;
    doctorProfileUrl: string;
    privacyPolicyUrl: string;
    slug: string;
    dmpKey: string;
    mainToggleFilter: 'vivera';
    languageData: {
        [key: string]: {
            [key: string]: string;
        };
    };
    countryData: {
        [key: string]: CountryData;
    };
    resultProfileImage: string;
    doctorProfileImage: string;
    useMyLocationIcon: string;
    segmentTooltipMapKeyIconsUrl: string;
    segmentTooltipMapKeyIconsUrlForTeen?: string;
    servicesOfferedFilterData?: {
        key: string;
        value: string;
    }[];
    tierPins: TierPins[];
    lanuagesFilterOptions: {
        value: string;
        translation: string;
        urlKey?: string;
    }[];
    insurancesFilterOptions: {
        value: string;
        translation: string;
    }[];
    sortOptions: {
        label: string;
        value: string;
        key?: string;
        disabled?: boolean;
    }[];
    sortOptionsMobile?: {
        type: FilterElements;
        label?: {
            value: string;
            useLanguageData: boolean;
        };
        value?: KeySortTypes;
        desc?: string;
        disabled?: boolean;
    }[];
    radiusOptions: RadiusOptions;
    stateOptions: {
        label: string;
        value: string;
    }[];
    zipUtility: ZipUtility;
    dobUtility: {
        mask: string;
        separator: '/' | '-';
    };
    mobileUtility: {
        mask: string;
        maxLength: number;
        separator?: '/' | '-' | ' ';
        prefix?: string;
    };
    trackingUtility?: {
        hashEmailAndPhone: HashEmailAndPhone;
    };
    optin?: {
        mandatory?: boolean;
        preChecked?: boolean;
        message?: string;
        secondOptinLabel?: string;
    };
    pageSlugs?: DocLocSlugs;
    localeId?: string;
    hideFilters?: {
        state?: boolean;
        vivera?: boolean;
        doctorType?: boolean;
        whitening?: boolean;
        viveraFilter?: boolean;
        invisalign_first?: boolean;
        invisalign_palatal_expanders?: boolean;
    };
    hidePaymentMethods?: boolean;
    showTierLevelFilter?: boolean;
    showFilters?: {
        isPediatric: boolean;
    };
    hideLabels?: {
        vip: boolean;
    };
    hideAppointmentFields?: {
        zip: boolean;
    };
    appointmentExtraFields?: {
        comment?: boolean;
    };
    features?: {
        showLendCare?: boolean;
    };
    colors?: Colors;
    heetFormId?: string;
    appointmentFormCookie?: AppointmentFormCookie;
    changeView?: ChangeView;
    initGoogleAutoComplete?: InitGoogleAutoComplete;
    region?: string;
    isLatam?: boolean;
    isApac?: boolean;
    isUS?: boolean;
    showSocialIcons?: boolean;
    socialIcons?: SocialIcons;
    ageRestriction?: {
        patientType: string;
        age: number;
    }[];
    corporatePartners?: {
        cpQuery?: string;
        partner?: Partner[];
    };
    enableGoogleSearch?: boolean;
    apiCountryList?: string;
    testAutomationIframeId: string;
    removedDlEvents: string[];
    modalsData: ModalData[];
    useRecaptchaForAPIs?: boolean;
    thankyouPageUrl?: string;
    programData?: ProgramData[];
    fromMiniSearch?: boolean;
    customAppointmentUrl: {
        docID: number;
        url: string;
    }[];
    zipsFor12MilesRadius: string[];
    zipsFor2point5MilesRadius: string[];
    enableHeartlandButtonSwap?: boolean;
    scheduleAppointmentUrl: string;
    zocdocScheduleAppointmentUrl: string;
    nexHealthScheduleAppointmentUrl: string;
    availablePrograms?: string[];
    availableServices?: string[];
    availableTreatments?: string[];
    useDocLoc3O?: boolean;
    hideAgeFilter?: boolean;
    disableProfilePage?: boolean;
    hideTiersFromProfile?: boolean;
    hideAgeInputField?: boolean;
    showBusinessName?: boolean;
    hideState?: boolean;
    annotationListItems?: string[];
    disableLog?: boolean;
    desclaimerPageUrl?: string;
    showDesclaimerPageLink?: boolean;
    excludeToken?: boolean;
    hostEnv?: string;
    enableHfd?: boolean;
    enableZocdoc?: boolean;
    enablePreferredContactTime?: boolean;
    selectOtherPatientFinancing?: boolean;
    enableNexHealth?: boolean;
    appointmentButtonSecquence?: string[];
};
export type ProgramData = {
    filterValue?: string;
    programKey: string;
    subleadSource?: string;
    thankyouPageUrl?: string;
    startTime?: string;
    endTime?: string;
};
export type Partner = {
    name?: string;
    cpValue?: string;
    sfdcValue?: string;
    imgUrl?: string;
    mobileImgUrl?: string;
    redirectSlug?: string;
    searchFilters?: Partial<SearchApiFilters>;
};
export type AlertModal = {
    show: boolean;
    title?: string;
    description?: string;
    imgUrl?: string;
};
export type ConfigState = {
    config: Config;
};
export type DocLocatorProps = Partial<Config> & {
    testHosts?: string[];
    prodRadiusUrl_US?: string;
    prodDocUrl_US?: string;
    prodLogUrl_US?: string;
    prodCheckCaptchaUrl?: string;
    prodRadiusUrl_LATAM?: string;
    prodDocUrl_LATAM?: string;
    prodLogUrl_LATAM?: string;
    testRadiusUrl_US?: string;
    testDocUrl_US?: string;
    testLogUrl_US?: string;
    testCheckCaptchaUrl?: string;
    testRadiusUrl_LATAM?: string;
    testDocUrl_LATAM?: string;
    testLogUrl_LATAM?: string;
    recaptchaAssessmentUrl?: string;
    testTokenApiUrlNA?: string;
    testTokenClientIdNA?: string;
    testTokenClientSecretNA?: string;
    sendAppointment?: SendAppointment;
    setFadFromNav?: (val: boolean) => void;
    setUniversalFadSearch?: (val: boolean) => void;
    setFromMiniSearch?: (val: boolean) => void;
};
export type DocLocSlugs = {
    doctorLocatorUrl: string;
    doctorProfileUrl: string;
};
export type CommonState = {
    hoveredMarkerId: number;
    clickedMarkerId: number;
    clickedMarkerPosition: Record<'top' | 'left', number>;
    filtersHeight: number;
    zipLatLng: ZipLatLng;
    comingFromInsideApp: boolean;
    view: DocLocViews;
    partner: Partner;
    mobileMapView: boolean;
    scrollToDocId: number;
    alertModal: AlertModal;
    programEnabled: string;
};
export type ViewState = {
    view: DocLocViews;
};
export type CacheType = {
    createdAt: TimeType;
    cache: any;
    geocode: {
        address: string;
        lat: number;
        lng: number;
    };
};
export type CacheState = {
    [key in CacheKeys]?: Record<string, CacheType>;
};
export interface Store {
    search: SearchState;
    doctor: DoctorState;
    filter: FilterState;
    config: ConfigState;
    common: CommonState;
    cache: CacheState;
}
export type ZipUtility = {
    type?: 'number' | 'text';
    mask?: string;
    maskChar?: string;
    maxLength?: number;
    validLengths?: number[];
    smallFont?: boolean;
};
export type Colors = {
    primary?: string;
    secondary?: string;
    headline?: string;
    black?: string;
};
