import { shouldKeepField } from '../../../utils/data/get-column-meta-data.js';
/** 无 fieldMap 时，由列定义生成工具栏用最小字段 schema */
function toolbarSchemaFromCol(col) {
    let component = 'CnInput';
    if (col.isAiColumn)
        component = 'CnAiField';
    else if (col.format === 'formula')
        component = 'CnFormulaField';
    else if (col.format === 'lookup')
        component = 'CnLookupField';
    return { 'x-component': component, 'x-decorator': 'CnFormItem' };
}
/**
 * 是否为 AI / 公式 / 引用列（依赖列定义上的标记，与 Model、Field Driver 约定一致）
 */
export function isAiFormulaOrLookupColumnDef(col) {
    if (!col)
        return false;
    if (col.isAiColumn)
        return true;
    return col.format === 'formula' || col.format === 'lookup';
}
/**
 * 工具栏可否选到此列：
 * 普通列需满足 shouldKeepField；AI / 公式 / 引用预期无 fieldMap，凭 columnDefinitions 即可。
 */
export function canUseInToolbar(field, columnDef) {
    if (shouldKeepField(field))
        return true;
    return isAiFormulaOrLookupColumnDef(columnDef);
}
/**
 * 工具栏用到的 Formily-like 片段：有 fieldMap 用真的；否则 AI/公式/引用列用 {@link toolbarSchemaFromCol}。
 */
export function getToolbarFieldSchema(field, columnDef) {
    if (shouldKeepField(field))
        return field;
    if (columnDef && isAiFormulaOrLookupColumnDef(columnDef)) {
        return toolbarSchemaFromCol(columnDef);
    }
    return field;
}
/**
 * 合并 fieldMap：对上述三类在 `fieldMap` 中本来就不存在的 `dataIndex`，补 {@link toolbarSchemaFromCol}，供筛选/填色条件面板读取。
 */
export function buildEffectiveFieldMap(fieldMap, columnDefinitions) {
    const base = { ...(fieldMap || {}) };
    columnDefinitions === null || columnDefinitions === void 0 ? void 0 : columnDefinitions.forEach((col) => {
        const key = col.dataIndex;
        const existing = base[key];
        if (shouldKeepField(existing))
            return;
        if (isAiFormulaOrLookupColumnDef(col)) {
            base[key] = toolbarSchemaFromCol(col);
        }
    });
    return base;
}
