"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const antd_1 = require("antd");
const Exception_1 = require("oak-domain/lib/types/Exception");
const ErrorMessage_1 = tslib_1.__importDefault(require("./ErrorMessage"));
const ErrorPage_1 = require("../../../types/ErrorPage");
const ErrorPage_2 = tslib_1.__importDefault(require("./ErrorPage"));
const errorPage_1 = require("../../../utils/errorPage");
function translateWithFallback(locales, key, fallback, params) {
    return (0, errorPage_1.translateErrorPageText)((localeKey, localeParams) => locales.t(localeKey, localeParams), key, fallback, params);
}
function Error(props) {
    const { error, features } = props;
    const { locales } = features;
    const t = (key, fallback, params) => translateWithFallback(locales, key, fallback, params);
    const renderRefreshErrorPage = (code, copy) => (<ErrorPage_2.default code={code} title={t(copy.titleKey, copy.titleFallback)} desc={t(copy.descKey, copy.descFallback)} content={<ErrorMessage_1.default error={error}/>}>
            <antd_1.Button type="primary" onClick={async () => {
            window.location.reload();
        }}>
                {t('common::refresh', '刷新')}
            </antd_1.Button>
        </ErrorPage_2.default>);
    console.log(error);
    if (error instanceof Exception_1.OakException) {
        const copy = (0, errorPage_1.getErrorPageCopy)(error);
        if (copy) {
            return renderRefreshErrorPage(copy.code, copy);
        }
        if (error instanceof Exception_1.OakClockDriftException) {
            // 服务器加密报错
            return (<react_1.default.Suspense fallback={null}>
                    <ErrorPage_2.default code={ErrorPage_1.ECode.error} title={translateWithFallback(locales, 'error::clockDrift.title', '系统时间异常')} desc={translateWithFallback(locales, 'error::clockDrift.content', '您的系统时间与服务器时间差异过大，请同步设备时间后刷新重试。')} content={<ErrorMessage_1.default error={error}/>}>
                    <antd_1.Button type="primary" onClick={async () => {
                    window.location.reload();
                }}>
                        {translateWithFallback(locales, 'common::refresh', '刷新')}
                    </antd_1.Button>
                    </ErrorPage_2.default>
                </react_1.default.Suspense>);
        }
        const { _module, message } = error;
        return (<ErrorPage_2.default code={ErrorPage_1.ECode.error} title={t('error::error.title', '内部异常')} desc={_module ? t(message, message, {
                '#oakModule': _module
            }) : message} content={<ErrorMessage_1.default error={error}/>}>
                <antd_1.Button type="primary" onClick={async () => {
                window.location.reload();
            }}>
                    {t('common::refresh', '刷新')}
                </antd_1.Button>
            </ErrorPage_2.default>);
    }
    const copy = (0, errorPage_1.getErrorPageCopy)(error);
    if (copy) {
        return (<react_1.default.Suspense fallback={null}>
                {renderRefreshErrorPage(copy.code, copy)}
            </react_1.default.Suspense>);
    }
    return (<ErrorPage_2.default code={ErrorPage_1.ECode.pageDataCacheFailure} title={t('error::unknown.title', '未知异常')} desc={t('error::unknown.content', '抱歉，出现未知异常，可能是数据缓存失效，需要清除缓存，请点击【清除缓存】再尝试')} content={<ErrorMessage_1.default error={error}/>}>
            <antd_1.Button type="primary" onClick={async () => {
            await features.localStorage.clear();
            window.location.reload();
        }}>
                {t('common::clearCache', '清空缓存')}
            </antd_1.Button>
        </ErrorPage_2.default>);
}
exports.default = Error;
