/**
 * 显示文本提取工具函数
 * 用于从不同的数据源（slotConfig、tokens）中提取并组合显示文本
 */
import { getDisplayLabelFromOptions } from './common-query-display-utils';
import { isDatePickerType } from './datetime-picker-display-utils';
import { extractDateShortcutNaturalLanguage } from '../constants/date-shortcuts';
/**
 * 从 slotConfig 和 formValue 中提取显示文本
 * @param slotConfig - slot 配置数组
 * @param formValue - 表单值对象
 * @param schema - 字段配置 schema
 * @returns 组合后的显示文本
 */
export function extractDisplayTextFromSlotConfig(slotConfig, formValue, schema) {
    const displayParts = [];
    slotConfig.forEach((slot) => {
        var _a, _b, _c, _d;
        if (slot.type === 'text') {
            // 自然语言：直接使用文本
            if (slot.value && slot.value.trim()) {
                displayParts.push(slot.value.trim());
            }
        }
        else if (slot.type === 'custom') {
            // 结构化：从 formValue 中提取显示文本
            const fieldKey = slot.key;
            const fieldData = formValue === null || formValue === void 0 ? void 0 : formValue[fieldKey];
            const fieldConfig = ((_a = slot.props) === null || _a === void 0 ? void 0 : _a.fieldConfig) || (schema === null || schema === void 0 ? void 0 : schema[fieldKey]);
            if (fieldData && (((_b = fieldData.labels) === null || _b === void 0 ? void 0 : _b.length) > 0 || fieldData.values !== undefined)) {
                const fieldTitle = (fieldConfig === null || fieldConfig === void 0 ? void 0 : fieldConfig.title) || ((_c = slot.props) === null || _c === void 0 ? void 0 : _c.fieldTitle) || fieldKey;
                const columnType = fieldConfig === null || fieldConfig === void 0 ? void 0 : fieldConfig['x-component'];
                const format = (_d = fieldConfig === null || fieldConfig === void 0 ? void 0 : fieldConfig['x-component-props']) === null || _d === void 0 ? void 0 : _d.format;
                const naturalLanguage = isDatePickerType(columnType)
                    ? extractDateShortcutNaturalLanguage(fieldData.values)
                    : undefined;
                const displayValue = getDisplayLabelFromOptions(fieldData.values, fieldData.options, columnType, naturalLanguage, format);
                displayParts.push(`${fieldTitle}: ${displayValue}`);
            }
        }
    });
    return displayParts.join(' ');
}
/**
 * 按照原始 tokens 的顺序组合显示文本
 * @param originalTokens - 原始 tokens 数组（保持原始顺序）
 * @param normalizedTokens - 标准化后的 tokens 数组
 * @param displayTexts - 从 convertTokensToSlotConfigs 返回的显示文本数组
 * @returns 组合后的显示文本
 */
export function extractDisplayTextFromTokens(originalTokens, normalizedTokens, displayTexts) {
    if (!originalTokens || originalTokens.length === 0) {
        // 如果没有原始 tokens，使用格式化后的 displayTexts
        return displayTexts.join(' ');
    }
    const displayParts = [];
    // 创建一个映射：columnName -> displayText，用于快速查找结构化数据的显示文本
    // 注意：displayTexts 和 normalizedTokens 的顺序是一致的
    const structuredDisplayMap = new Map();
    normalizedTokens.forEach((token, index) => {
        if (token.queryType === 'STRUCTURED' && token.columnName && displayTexts[index]) {
            structuredDisplayMap.set(token.columnName, displayTexts[index]);
        }
    });
    // 按照原始 tokens 的顺序构建显示文本
    originalTokens.forEach((token) => {
        if (token.queryType === 'NATURAL_LANGUAGE' && token.naturalLanguage) {
            // 自然语言：直接使用文本
            displayParts.push(token.naturalLanguage);
        }
        else if (token.queryType === 'STRUCTURED' && token.columnName && token.value !== undefined) {
            // 结构化：从映射中查找格式化后的显示文本
            const matchingDisplayText = structuredDisplayMap.get(token.columnName);
            if (matchingDisplayText) {
                displayParts.push(matchingDisplayText);
            }
            else {
                // 如果找不到，使用 displayName 和格式化后的 value
                const displayValue = getDisplayLabelFromOptions(token.value, token.options, token.columnType, token.naturalLanguage);
                displayParts.push(`${token.displayName}: ${displayValue}`);
            }
        }
    });
    if (displayParts.length > 0) {
        return displayParts.join(' ');
    }
    // 如果没有找到任何部分，使用格式化后的 displayTexts
    return displayTexts.join(' ');
}
