/**
 * FormulaFieldDriver —— 公式字段驱动
 *
 * 迁移自：
 * - add-field-button.tsx 中 handleFormulaConfigSave
 * - formula-engine.ts 中 computeFormulaColumn
 * - columnHeaderMenuUtils.ts 中 handleEditFormulaColumn / 公式删除分支
 *
 * 设计要点：
 * 1. 公式字段为同步计算字段（MaterializeMode = 'sync-compute'），
 *    persistMeta 直接写入本地 dataModel，无远程调用。
 * 2. materializeData 调用 computeFormulaColumn 在前端批量求值后写入 rawData。
 * 3. 公式字段全局仅注册一个实例（type = 'formula'），不像 AI 字段按子类型多实例。
 */
import type { FieldDriver, FieldMeta, FieldUiContribution, FieldRecord, FieldContext } from '../types';
/** 公式字段配置，expression 为用户输入的公式表达式 */
export interface FormulaFieldConfig {
    fieldName: string;
    /** 公式表达式，如 "{字段A} + {字段B}" */
    expression: string;
    /** 该公式引用的其他字段 code 列表，用于依赖追踪 */
    referencedFields: string[];
    columnCode: string;
}
export declare class FormulaFieldDriver implements FieldDriver<FormulaFieldConfig> {
    getMeta(): FieldMeta;
    getUiContribution(): FieldUiContribution;
    createDefaultConfig(): FormulaFieldConfig;
    validateConfig(config: FormulaFieldConfig): {
        valid: boolean;
        error?: string;
    };
    /** 本地持久化：直接写入 dataModel 的 formulaConfig 分桶（无远程调用） */
    persistMeta(config: FormulaFieldConfig, ctx: FieldContext): Promise<FieldRecord>;
    /** 构建列定义（format = 'formula'），通过 dataModel.addColumn 注册 */
    buildColumnDef(record: FieldRecord, ctx: FieldContext): any;
    /** 将新列追加到当前视图的 columnOrder */
    attachToView(record: FieldRecord, ctx: FieldContext): void;
    /**
     * 触发公式列同步求值。
     * 公式重算逻辑已下沉到 dataModel.setRawData 内部（基于 customFields.formulaConfig 全量重算），
     * 这里只需在 formulaConfig 已写入后用当前 rawData 触发一次写入即可。
     */
    materializeData(_record: FieldRecord, _config: FormulaFieldConfig, ctx: FieldContext): Promise<void>;
    /**
     * 编辑公式字段时的更新逻辑。
     */
    updateMeta(columnId: string, config: FormulaFieldConfig, ctx: FieldContext): Promise<FieldRecord>;
    remove(columnId: string, ctx: FieldContext): Promise<void>;
    /** 从旧 formulaConfig 分桶恢复 FieldRecord，用于编辑面板回填 */
    hydrate(columnId: string, ctx: FieldContext): FieldRecord | undefined;
    /** 从 dataModel 中彻底清理该字段的所有痕迹（列定义、分桶、各视图配置） */
    private removeFieldFromDataModel;
}
