"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCellFormat = getCellFormat;
exports.registerFormat = registerFormat;
exports.config = config;
exports.clearCacheFormat = clearCacheFormat;
const merge_1 = __importDefault(require("lodash/merge"));
const memoize_1 = __importDefault(require("lodash/memoize"));
const cn_table_cell_format_1 = __importDefault(require("../cn-table-cell-format"));
// 全局缓存的自定义格式
let cacheFormat = {};
// 缓存版本号，用于在 cacheFormat 变化时使 memoize 缓存失效
let cacheVersion = 0;
/**
 * 缓存 getDefaultFormat 的结果
 * 使用 memoize 避免每次调用都重新创建对象
 */
const getMemoizedDefaultFormat = (0, memoize_1.default)((_cacheVersion, // 用于缓存失效
context, adapterLocale) => {
    return (0, cn_table_cell_format_1.default)(context, adapterLocale);
}, 
// 自定义缓存 key
(cacheVer, context, adapterLocale) => {
    var _a, _b;
    const numLocale = (_a = context === null || context === void 0 ? void 0 : context.numAdapterLocale) !== null && _a !== void 0 ? _a : '';
    const dateLocale = (_b = context === null || context === void 0 ? void 0 : context.dateAdapterLocale) !== null && _b !== void 0 ? _b : '';
    return `${cacheVer}-${numLocale}-${dateLocale}-${adapterLocale !== null && adapterLocale !== void 0 ? adapterLocale : ''}`;
});
/**
 * 获取单元格格式化映射表
 * 合并默认格式、缓存格式和传入的自定义格式
 *
 * @param format 自定义格式映射
 * @param context 本地化上下文
 * @param adapterLocale 本地化适配标识
 * @returns 合并后的格式映射表
 */
function getCellFormat(format, context, adapterLocale) {
    const defaultFormat = getMemoizedDefaultFormat(cacheVersion, context, adapterLocale);
    // 如果没有额外的 format 和 cacheFormat，直接返回缓存的默认格式
    const hasCustomFormat = format && Object.keys(format).length > 0;
    const hasCacheFormat = Object.keys(cacheFormat).length > 0;
    if (!hasCustomFormat && !hasCacheFormat) {
        return defaultFormat;
    }
    return {
        ...defaultFormat,
        ...cacheFormat,
        ...format,
    };
}
/**
 * 注册自定义格式
 * 会深度合并到全局缓存中
 *
 * @param format 要注册的格式映射
 */
function registerFormat(format) {
    cacheFormat = (0, merge_1.default)({}, cacheFormat, format);
    cacheVersion++; // 使 memoize 缓存失效
}
/**
 * 配置格式
 * 使用浅合并替换全局缓存
 *
 * @param props 配置对象，包含 format 属性
 */
function config(props) {
    cacheFormat = { ...cacheFormat, ...props === null || props === void 0 ? void 0 : props.format };
    cacheVersion++; // 使 memoize 缓存失效
}
/**
 * 清除缓存的格式
 * 用于测试或重置场景
 */
function clearCacheFormat() {
    cacheFormat = {};
    cacheVersion++;
}
