"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildLookupSearchConfigMap = buildLookupSearchConfigMap;
exports.buildJoinTableColumnsFromLookupSearchConfigMap = buildJoinTableColumnsFromLookupSearchConfigMap;
exports.buildJoinTableColumnsFromLookupConfig = buildJoinTableColumnsFromLookupConfig;
exports.createLookupSearchConfigUpdatePayload = createLookupSearchConfigUpdatePayload;
/**
 * 将 DataModel 中的 lookup 配置映射为面向 CnAiFilter 的事件负载结构。
 * 仅保留搜索链路需要的字段，并过滤掉缺失表/字段标识的脏数据项。
 *
 * @param lookupConfig DataModel.customFields.lookupConfig 原始配置
 * @returns 以 columnCode 为 key 的 lookup 搜索配置 map
 */
function buildLookupSearchConfigMap(lookupConfig) {
    if (!lookupConfig)
        return {};
    return Object.entries(lookupConfig).reduce((acc, [columnCode, item]) => {
        if (!(item === null || item === void 0 ? void 0 : item.sourceTableId) || !(item === null || item === void 0 ? void 0 : item.targetFieldCode)) {
            return acc;
        }
        acc[columnCode] = {
            columnCode,
            fieldName: item.fieldName || columnCode,
            sourceTableId: item.sourceTableId,
            sourceTableName: item.sourceTableName,
            targetFieldCode: item.targetFieldCode,
            targetFieldName: item.targetFieldName,
            canSearch: item.canSearch,
            model: item.model,
        };
        return acc;
    }, {});
}
/**
 * 基于 lookup 搜索配置 map 聚合 `joinTableColumns`：
 * - 以 `sourceTableId` 分组
 * - 收集 `targetFieldCode` 去重
 * - 与 `canSearch` 解耦（只要是有效引用字段就纳入）
 *
 * @param lookupSearchConfigMap 归一化后的 lookup 配置 map
 * @returns `joinTableColumns` 对象结构（不包数组）
 */
function buildJoinTableColumnsFromLookupSearchConfigMap(lookupSearchConfigMap) {
    const joinTableColumnsMap = {};
    Object.values(lookupSearchConfigMap).forEach((config) => {
        if (!(config === null || config === void 0 ? void 0 : config.sourceTableId) || !(config === null || config === void 0 ? void 0 : config.targetFieldCode))
            return;
        if (!joinTableColumnsMap[config.sourceTableId]) {
            joinTableColumnsMap[config.sourceTableId] = new Set();
        }
        joinTableColumnsMap[config.sourceTableId].add(config.targetFieldCode);
    });
    return Object.entries(joinTableColumnsMap).reduce((acc, [sourceTableId, fieldSet]) => {
        acc[sourceTableId] = Array.from(fieldSet);
        return acc;
    }, {});
}
/**
 * 从 DataModel 原始 lookup 配置直接生成 `joinTableColumns`。
 *
 * @param lookupConfig DataModel.customFields.lookupConfig 原始配置
 * @returns `joinTableColumns` 对象结构（不包数组）
 */
function buildJoinTableColumnsFromLookupConfig(lookupConfig) {
    return buildJoinTableColumnsFromLookupSearchConfigMap(buildLookupSearchConfigMap(lookupConfig));
}
/**
 * 构建 lookup 配置同步事件 payload。
 * `revision` 使用时间戳，便于消费侧做幂等或去抖判断。
 *
 * @param lookupConfig DataModel 中的 lookup 配置
 * @param source 触发来源（hydrate/create/update/delete）
 * @returns 标准化后的事件负载
 */
function createLookupSearchConfigUpdatePayload(lookupConfig, source) {
    return {
        lookupSearchConfigs: buildLookupSearchConfigMap(lookupConfig),
        source,
        revision: Date.now(),
    };
}
