var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
    return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (g && (g = 0, op[0] && (_ = 0)), _) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
import { useEffect, useMemo, useState } from 'react';
import { useAppDispatch, useAppSelector } from 'src/app/redux/store';
import { getDoctorById } from 'src/app/redux/slices/doctor';
import { getFiltersFromUrl, getActionScore } from 'src/lib/common/helpers';
import { daysOfWeek } from 'src/lib/utils';
import { DocLocViews } from 'src/lib/types/types';
import Profile from '../../components/DoctorProfile';
import AnchorBar from './AnchorBar';
import DocDetails from './DocDetails';
import Offices from './Offices';
import Loading from 'src/components/Loading';
import AppointmentForm from '../../components/AppointmentForm';
import withReCaptcha from 'src/components/ReCaptcha';
import { NotFound } from 'src/components/NotFound';
import css from './ProfilePage.module.scss';
import { _cx } from 'src/utility/class';
import Modal from 'src/components/Modal/ModalModule';
import Detail from './DocDetails/Detail';
import Button from 'src/components/Button';
var cx = _cx(css);
var ProfilePage = function (_a) {
    var _b;
    var isMobile = _a.isMobile, windowSize = _a.windowSize, captchaIsLoaded = _a.isReady, executeCaptcha = _a.execute;
    var _c = __read(useState(false), 2), isMounted = _c[0], setIsMounted = _c[1];
    var _d = __read(useState(false), 2), showAppointmentModal = _d[0], setShowAppointmentModal = _d[1];
    var _e = __read(useState(false), 2), preChecked = _e[0], setPreChecked = _e[1];
    var dispatch = useAppDispatch();
    var _f = useAppSelector(function (state) { return state.config.config; }), language = _f.language, languageData = _f.languageData, country = _f.country, countryData = _f.countryData, useRecaptchaForAPIs = _f.useRecaptchaForAPIs, useDocLoc3O = _f.useDocLoc3O;
    var zipLatLng = useAppSelector(function (state) { return state.common.zipLatLng; });
    var useRecaptcha = useMemo(function () { return useRecaptchaForAPIs === true; }, [useRecaptchaForAPIs]);
    var _g = useMemo(function () { return getFiltersFromUrl(countryData[country]); }, []), profileId = _g.profile, requestAppointment = _g.requestAppointment;
    var _h = useAppSelector(function (state) { return state.doctor; }), data = _h.result, isLoading = _h.isLoading;
    var notFound = useRecaptcha
        ? preChecked
        : !preChecked && isMounted && !isLoading && (!profileId || !data || data.status === 400);
    var t = languageData[language];
    var _j = __read(useState(-1), 2), selectedDsoId = _j[0], setSelectedDsoId = _j[1];
    var setDsoId = function (selectedDsoId) { return setSelectedDsoId(selectedDsoId); };
    var offices = (_b = data === null || data === void 0 ? void 0 : data.bio) === null || _b === void 0 ? void 0 : _b.offices;
    useEffect(function () {
        if (useRecaptcha) {
            if (captchaIsLoaded) {
                var doPreCheck = function () { return __awaiter(void 0, void 0, void 0, function () {
                    var ok;
                    return __generator(this, function (_a) {
                        switch (_a.label) {
                            case 0: return [4 /*yield*/, executeCaptcha('pre_check').then(function (token) { return __awaiter(void 0, void 0, void 0, function () {
                                    return __generator(this, function (_a) {
                                        dispatch(getDoctorById({ id: profileId, token: "".concat(token, "|").concat(getActionScore()) }));
                                        return [2 /*return*/];
                                    });
                                }); })];
                            case 1:
                                ok = _a.sent();
                                setPreChecked(Boolean(ok));
                                return [2 /*return*/];
                        }
                    });
                }); };
                doPreCheck();
            }
        }
        else {
            dispatch(getDoctorById({ id: profileId }));
            setPreChecked(true);
        }
        setIsMounted(true);
    }, [captchaIsLoaded, dispatch, executeCaptcha, profileId, useRecaptcha]);
    useEffect(function () {
        if (isMobile && requestAppointment === 'true')
            setShowAppointmentModal(true);
    }, [requestAppointment, isMobile]);
    if (notFound)
        return _jsx(NotFound, { color: "gold" });
    return (_jsx(_Fragment, { children: data && Object.keys(data).length > 0 ? (_jsxs("div", { className: cx('layout-container', { isMobile: isMobile }), children: [_jsxs("div", { className: cx('profile-details-container', { isMobile: isMobile }), children: [isMobile && zipLatLng.lat && (_jsx("div", { className: cx('back-results'), children: _jsx(Button, { styleType: "backButton", onClick: function () { return history.back(); }, children: t.back_to_search }) })), _jsx(Profile, { data: data, profileId: profileId || '', setDsoId: setDsoId, t: t, isMobile: isMobile, view: DocLocViews.DOC_PROFILE, showAppointmentModal: function () { return setShowAppointmentModal(true); } }), isMobile && _jsx(AnchorBar, { t: t, data: data, selectedDsoId: selectedDsoId }), _jsx("div", { className: cx('details', { isMobile: isMobile }), children: _jsx(DocDetails, { t: t, data: data, profileId: Number(profileId), selectedDsoId: selectedDsoId, daysOfWeek: daysOfWeek, isMobile: isMobile }) }), offices && offices.length > 0 && (_jsx("div", { className: cx('offices-details'), children: _jsx(Offices, { data: data, t: t, isMobile: isMobile, offices: offices, daysOfWeek: daysOfWeek }) })), !useDocLoc3O && isMobile && (_jsx(Detail, { isMobile: isMobile, label: t.notes, children: _jsx("ul", { className: cx('details-list'), children: _jsx("li", { className: cx('text-small'), children: t.default_note }) }) })), useDocLoc3O && (_jsx(Detail, { isMobile: isMobile, label: t.notes, children: _jsx("ul", { className: cx('details-list'), children: _jsx("li", { className: cx('text-small'), children: t.default_note }) }) }))] }), !isMobile && (_jsx("div", { className: cx('ra-form-container', { isMobile: isMobile }), children: _jsx(AppointmentForm, { t: t, isMobile: isMobile, profileId: profileId || '', data: data }) })), showAppointmentModal && (_jsx(Modal, { setShowModal: function () { return setShowAppointmentModal(false); }, size: "lg", padding: "0", children: _jsx(AppointmentForm, { t: t, isMobile: isMobile, profileId: profileId || '', data: data, isModal: true, closeModal: function () { return setShowAppointmentModal(false); } }) }))] })) : (_jsx("div", { className: "loading-wrapper", children: _jsx(Loading, { isLoading: true, children: _jsx(_Fragment, {}) }) })) }));
};
export default withReCaptcha(ProfilePage);
