"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = ErrorPage;
const tslib_1 = require("tslib");
const react_1 = tslib_1.__importDefault(require("react"));
const antd_1 = require("antd");
const ErrorPage_1 = require("../../../types/ErrorPage");
const features_1 = require("../features");
const errorInfo = {
    [ErrorPage_1.ECode.forbidden]: {
        title: '403 Forbidden',
        desc: '抱歉，您无权限访问此页面。',
        status: '403',
    },
    [ErrorPage_1.ECode.notFound]: {
        title: '404 Not Found',
        desc: '抱歉，您访问的页面不存在。',
        status: '404',
    },
    [ErrorPage_1.ECode.error]: {
        title: '500 Internal Server Error',
        desc: '抱歉，服务器出错啦！',
        status: '500',
    },
    [ErrorPage_1.ECode.networkError]: {
        title: '网络异常',
        desc: '网络异常，请稍后再试。',
        status: '500',
    },
    [ErrorPage_1.ECode.browserIncompatible]: {
        title: '浏览器版本低',
        desc: '抱歉，您正在使用的浏览器版本过低，无法打开当前网页。',
        status: '500',
    },
    [ErrorPage_1.ECode.maintenance]: {
        title: '系统维护中',
        desc: '系统维护中，请稍后再试。',
        status: '500',
    },
    [ErrorPage_1.ECode.pageCrash]: {
        title: '抱歉，网页崩溃了',
        desc: '网页似乎遇到了问题，我们将尽快解决，请稍后重新加载。',
        status: '500',
        titleKey: 'error::pageCrash.title',
        descKey: 'error::pageCrash.content',
    },
    [ErrorPage_1.ECode.pageUpdate]: {
        title: '网页有更新',
        desc: '检查到网页有更新，请刷新以查看最新内容。',
        status: '500',
        titleKey: 'error::pageUpdate.title',
        descKey: 'error::pageUpdate.content',
    },
    [ErrorPage_1.ECode.pageDataCacheFailure]: {
        title: '数据缓存失效',
        desc: '非常抱歉，数据缓存已失效。请点击【清除缓存】以更新信息。',
        status: '500',
    },
};
function translateWithFallback(t, key, fallback) {
    if (!t || !key) {
        return fallback;
    }
    const result = t(key, {
        '#oakModule': 'oak-frontend-base',
    });
    const lastPart = key.split('.').pop();
    const lastNamespacePart = key.split('::').pop()?.split('.').pop();
    return !result || result === key || result === lastPart || result === lastNamespacePart
        ? fallback
        : result;
}
function ErrorPage(props) {
    const { code, title, desc, children, content } = props;
    const info = errorInfo[code] || errorInfo[ErrorPage_1.ECode.error];
    const features = (0, features_1.useFeatures)();
    const t = features.locales?.t.bind(features.locales);
    return (<antd_1.Result status={info.status} title={title || translateWithFallback(t, info.titleKey, info.title)} subTitle={desc || translateWithFallback(t, info.descKey, info.desc)} extra={(<antd_1.Space direction="vertical" align="center" size={16}>
                    {content}
                    {children || (<antd_1.Button type="primary" onClick={() => window.location.reload()}>
                            {translateWithFallback(t, 'common::refresh', '刷新')}
                        </antd_1.Button>)}
                </antd_1.Space>)}/>);
}
