/**
 * 数据转换工具：将 UI 层的 slot 配置和表单值数据转换为内部 token 格式
 */
import { processOptionsForApi } from '../cn-ai-filter/utils/build-selected-options.js';
/**
 * 按路径读取表单字段值，兼容扁平 key 和点路径嵌套对象两种写法。
 * 主要用于 lookup 场景下的 `joinTableParams.xxx.yyy` 字段取值。
 *
 * @param formValueData 表单数据对象
 * @param fieldKey 字段 key（可能是点路径）
 * @returns 字段值；不存在时返回 undefined
 */
function getFieldDataByPath(formValueData, fieldKey) {
    if (!formValueData || !fieldKey)
        return undefined;
    if (formValueData[fieldKey] !== undefined)
        return formValueData[fieldKey];
    return fieldKey.split('.').reduce((acc, key) => {
        if (!acc || typeof acc !== 'object')
            return undefined;
        return acc[key];
    }, formValueData);
}
/**
 * 将 slot 配置和表单值转换为内部 token 格式
 * @param slotConfig - slot 配置数组
 * @param formValueData - form 值数据对象
 * @returns 内部 token 数组
 */
export function convertSlotConfigToInternalTokens(slotConfig, formValueData) {
    const tokens = [];
    slotConfig === null || slotConfig === void 0 ? void 0 : slotConfig.forEach((slot) => {
        var _a, _b, _c, _d;
        if (slot.type === 'text') {
            // 纯文本，转换为 USER_ACTIVE_INPUT
            if (slot.value && slot.value.trim()) {
                tokens.push({
                    name: '',
                    values: [slot.value.trim()],
                    tokenSourceEnum: 'USER_ACTIVE_INPUT',
                });
            }
        }
        else if (slot.type === 'select') {
            // 下拉选择，转换为 TAG_PANEL
            if (slot.value) {
                const options = ((_a = slot.props) === null || _a === void 0 ? void 0 : _a.options) || [];
                const option = options.find((opt) => opt === slot.value || opt.value === slot.value);
                const displayValue = typeof option === 'object' ? option === null || option === void 0 ? void 0 : option.label : option || slot.value;
                tokens.push({
                    name: ((_b = slot.props) === null || _b === void 0 ? void 0 : _b.placeholder) || '',
                    values: [displayValue],
                    dataBaseName: slot.key,
                    dataBaseValues: [slot.value],
                    analyzeType: 'FILTER',
                    tokenSourceEnum: 'TAG_PANEL',
                });
            }
        }
        else if (slot.type === 'input') {
            // 输入框，如果有值则转换为 USER_ACTIVE_INPUT
            if (slot.value && slot.value.trim()) {
                tokens.push({
                    name: '',
                    values: [slot.value.trim()],
                    tokenSourceEnum: 'USER_ACTIVE_INPUT',
                });
            }
        }
        else if (slot.type === 'custom') {
            // 自定义字段（schema 字段），转换为 TAG_PANEL
            const fieldKey = slot.key;
            const fieldData = getFieldDataByPath(formValueData, fieldKey);
            const fieldConfig = (_c = slot.props) === null || _c === void 0 ? void 0 : _c.fieldConfig;
            if (fieldData && fieldData.labels && fieldData.labels.length > 0) {
                // 处理 options：只传选中项
                let selectedValues = [];
                if (Array.isArray(fieldData.values)) {
                    selectedValues = fieldData.values;
                }
                else if (fieldData.values !== undefined) {
                    selectedValues = [fieldData.values];
                }
                const options = processOptionsForApi(fieldData.options, selectedValues);
                tokens.push({
                    name: (fieldConfig === null || fieldConfig === void 0 ? void 0 : fieldConfig.title) || ((_d = slot.props) === null || _d === void 0 ? void 0 : _d.fieldTitle) || '',
                    values: fieldData.labels || [],
                    dataBaseName: fieldKey,
                    dataBaseValues: fieldData.values || [],
                    analyzeType: 'FILTER',
                    tokenSourceEnum: 'TAG_PANEL',
                    options,
                });
            }
        }
    });
    return tokens;
}
