/**
 * 公式计算引擎
 *
 * 统一字段引用语法：${fieldName}
 * 支持 8 种公式类型：
 * - calc:       数学运算          expression = '${price} * ${quantity}'
 * - concat:     字符串拼接        expression = '${lastName}${firstName}'
 * - condition:  多分支条件判断     branches = [{ when, then }]
 * - lookup:     联动回填          lookupMappings = [{ key, values }]
 * - aggregate:  聚合运算          expression = 'sum' / 'avg' / 'count' / 'min' / 'max'
 * - dateCalc:   日期计算          expression = '${start} ~ ${end}', dateUnit = 'day'
 * - format:     格式化            expression = 'thousands' / 'padStart' / 'toFixed' / 'regex'
 * - ternary:    三元表达式        expression = '${score} >= 60 ? ${score} : 0'
 *
 * 配置示例：
 * field: {
 *   fieldName: 'totalPrice',
 *   preps: {
 *     formula: {
 *       enable: true,
 *       type: 'calc',
 *       sourceFields: ['price', 'quantity'],
 *       expression: '${price} * ${quantity}',
 *       precision: 2,
 *       suffix: '元',
 *     }
 *   }
 * }
 */
/** 公式类型 */
export type FormulaType = "calc" | "concat" | "condition" | "lookup" | "aggregate" | "dateCalc" | "format" | "ternary";
/** 条件分支配置 */
export interface ConditionBranch {
    /** 匹配表达式，如 '${score} >= 90' */
    when: string;
    /** 匹配时返回的值，支持常量或 ${fieldName} 引用 */
    then: any;
}
/** 联动回填映射配置 */
export interface LookupMapping {
    /** 匹配的源字段值 */
    key: string;
    /** 回填目标字段名 -> 回填值的映射 */
    values: Record<string, any>;
}
/** 公式配置 */
export interface FormulaConfig {
    /** 是否启用 */
    enable: boolean;
    /** 公式类型 */
    type: FormulaType;
    /** 依赖字段列表 */
    sourceFields: string[];
    /** 公式表达式，统一使用 ${fieldName} 引用字段 */
    expression?: string;
    /** 条件分支（type=condition 时使用） */
    branches?: ConditionBranch[];
    /** 联动回填映射（type=lookup 时使用） */
    lookupMappings?: LookupMapping[];
    /** 精度，type=calc/format(toFixed) 时使用 */
    precision?: number;
    /** 前缀，type=calc 时使用，如 '¥' */
    prefix?: string;
    /** 后缀，type=calc 时使用，如 '%'、'元' */
    suffix?: string;
    /** 日期单位，type=dateCalc 时使用：'year'|'month'|'day'|'hour'|'minute'|'second' */
    dateUnit?: "year" | "month" | "day" | "hour" | "minute" | "second";
    /** 日期偏移量，type=dateCalc 且 mode=offset 时使用，正数向后，负数向前 */
    dateOffset?: number;
    /** 日期计算模式：diff(差值) | offset(偏移) | format(格式化) */
    dateMode?: "diff" | "offset" | "format";
    /** 日期输出格式，type=dateCalc 且 mode=format 时使用，如 'YYYY-MM-DD' */
    dateFormat?: string;
    /** 格式化子类型，type=format 时使用 */
    formatType?: "thousands" | "padStart" | "toFixed" | "regex";
    /** 格式化参数：padStart 的目标长度 / regex 的替换模式 */
    formatArg?: string | number;
    /** 格式化参数2：padStart 的填充字符 / regex 的替换值 */
    formatArg2?: string;
    /** 聚合子字段，type=aggregate 时使用，指定子表单中要聚合的字段名 */
    aggregateField?: string;
    /** 条件不匹配时的默认值，type=condition/ternary 时使用 */
    defaultValue?: any;
}
/** 字段定义（最小集） */
export interface FormulaField {
    fieldName: string;
    type?: string;
    formula?: FormulaConfig;
    preps?: Record<string, any>;
}
/**
 * 执行公式计算，返回计算结果
 * @param formula 公式配置
 * @param formData 表单数据
 * @returns 计算结果
 */
export declare const executeFormula: (formula: FormulaConfig, formData: Record<string, any>) => any;
/**
 * 执行公式并回填表单数据
 * - lookup: 回填多个目标字段
 * - 其他类型: 结果赋值给当前字段
 *
 * @param field 当前字段
 * @param formInfo 所有字段列表
 * @param formData 表单数据（会被直接修改）
 */
export declare const executeFormulaWithFill: (field: FormulaField, formInfo: FormulaField[], formData: Record<string, any>) => void;
/**
 * 构建字段级别的 watch 监听器
 * 当依赖字段变化时，自动触发公式计算并回填
 *
 * @param field 当前字段
 * @param formInfo 所有字段列表
 * @param formData 响应式表单数据
 * @param watchFn Vue watch 函数
 * @returns stop 函数数组，用于在 onBeforeUnmount 中清理
 */
export declare const setupFormulaWatchers: (field: FormulaField, formInfo: FormulaField[], formData: any, watchFn: typeof import('vue').watch) => (() => void)[];
/**
 * 批量初始化表单中所有带 formula 配置的字段
 * 适合在表单容器组件 onMounted 时调用
 *
 * @param formInfo 所有字段列表
 * @param formData 响应式表单数据
 * @param watchFn Vue watch 函数
 * @returns stop 函数数组，用于在 onBeforeUnmount 中清理
 */
export declare const initFormFormulaWatchers: (formInfo: FormulaField[], formData: any, watchFn: typeof import('vue').watch) => (() => void)[];
