/**
 * 策略配置主结构
 */
export interface StrategyConfig<T = Record<string, any>> {
    /** 元信息 */
    metadata: StrategyMetadata<T>;
    /** 条件组（可嵌套，每层可绑定动作） */
    conditions: ConditionGroup;
    /** 动作列表（带唯一ID） */
    actions: ActionEffect[];
    /** 展示配置（可选） */
    display?: DisplayConfig;
}
/**
 * 策略元信息
 */
export interface StrategyMetadata<T = Record<string, any>> {
    /** 策略ID */
    id: string;
    /** 策略名称 */
    name: string | Record<string, string>;
    /** 策略类型（完全可扩展） */
    type: string;
    /** 计算类型 */
    calculationType?: 'single' | 'cumulative';
    /** 版本 */
    version?: string;
    /** 描述 */
    description?: string | Record<string, string>;
    /** 自定义元数据 */
    custom?: T;
}
/**
 * 条件组（支持嵌套）
 */
export interface ConditionGroup {
    /** 逻辑运算符 */
    operator: 'and' | 'or' | 'not';
    /** 条件规则列表（可以是单条件或嵌套的条件组） */
    rules: Array<ConditionRule | ConditionGroup>;
    /** 关联的动作ID列表（必填，可以为空数组） */
    actionIds: string[];
}
/**
 * 条件规则（原子条件）
 * 支持 code 模式使用 eval 执行
 */
export interface ConditionRule {
    /** 类型 */
    type: 'code' | 'operator';
    /** 代码（code模式使用，使用eval执行） */
    code?: string;
    /** 维度（完全可扩展） */
    dimension?: string;
    /** 字段名 */
    field?: string;
    /** 运算符 */
    operator?: string;
    /** 比较值 */
    value?: any;
    /** 值类型 */
    valueType?: 'number' | 'string' | 'boolean' | 'array' | 'object' | 'date';
    /** 值单位 */
    valueUnit?: string;
    /** 额外配置 */
    config?: Record<string, any>;
}
/**
 * 动作效果
 */
export interface ActionEffect {
    /** 动作的唯一标识 */
    id: string;
    /** 效果类型（完全可扩展） */
    type: string;
    /** 运算符（可选） */
    operator?: string;
    /** 值 */
    value: any;
    /** 值类型 */
    valueType?: 'number' | 'string' | 'boolean' | 'array' | 'object';
    /** 值单位 */
    valueUnit?: string;
    /** 作用目标 */
    target: string;
    /** 优先级（数字越大优先级越高） */
    priority?: number;
    /** 配置（完全可扩展） */
    config?: Record<string, any>;
}
/**
 * 展示配置
 */
export interface DisplayConfig {
    /** 商品卡片展示 */
    productCard?: {
        text: string | Record<string, string>;
        type: 'tag' | 'badge' | 'label';
        image?: string;
        style?: Record<string, any>;
    };
    /** 详情页展示 */
    detail?: {
        title: string | Record<string, string>;
        description: string | Record<string, string>;
        image?: string;
    };
    /** 自定义展示配置 */
    custom?: Record<string, any>;
}
/**
 * 运行时上下文结构
 */
export interface RuntimeContext {
    /** 实体数据（完全开放，由业务层定义） */
    entities: Record<string, any>;
    /** 属性数据（扁平化的计算值，用于条件判断） */
    attributes: Record<string, any>;
    /** 上下文元数据 */
    metadata: ContextMetadata;
}
/**
 * 上下文元数据
 */
export interface ContextMetadata {
    /** 请求ID（用于追踪） */
    requestId?: string;
    /** 时间戳 */
    timestamp: number;
    /** 语言 */
    locale?: string;
    /** 自定义元数据 */
    custom?: Record<string, any>;
}
/**
 * 评估结果结构
 */
export interface EvaluationResult {
    /** 是否成功执行（引擎层面） */
    success: boolean;
    /** 策略是否适用（业务层面） */
    applicable: boolean;
    /** 结果码 */
    code: string;
    /** 消息（多语言key或直接文本） */
    message?: string;
    /** 匹配信息 */
    matched: MatchedInfo;
    /** 匹配的动作列表（按priority排序） */
    matchedActions: ActionEffect[];
    /** 输出结果（完全开放，由适配器定义） */
    outputs: Record<string, any>;
    /** 执行轨迹（可选，用于调试） */
    trace?: ExecutionTrace;
    /** 策略配置 */
    config: StrategyConfig;
}
/**
 * 匹配信息
 */
export interface MatchedInfo {
    /** 条件是否满足 */
    conditions: boolean;
    /** 收集到的 actionIds */
    actionIds: string[];
    /** 详细匹配信息 */
    details: Record<string, any>;
    /** 顶层第一个失败的 field（仅在 conditions=false 时存在，便于直接消费） */
    failedField?: string;
    /** 失败的原子规则列表（仅在 conditions=false 时存在；or 全失败时可能有多条） */
    failedRules?: FailedRuleInfo[];
}
/**
 * 失败规则信息
 */
export interface FailedRuleInfo {
    /** 字段名 */
    field?: string;
    /** 运算符 */
    operator?: string;
    /** 配置的比较值（阈值） */
    value?: any;
    /** 实际取到的字段值 */
    actualValue?: any;
}
/**
 * 执行轨迹
 */
export interface ExecutionTrace {
    /** 执行步骤 */
    steps: TraceStep[];
    /** 总耗时（毫秒） */
    duration: number;
    /** 错误信息 */
    errors?: Array<{
        step: string;
        error: string;
        timestamp: number;
    }>;
}
/**
 * 追踪步骤
 */
export interface TraceStep {
    /** 步骤名称 */
    step: string;
    /** 步骤状态 */
    status: 'success' | 'failed' | 'skipped';
    /** 耗时（毫秒） */
    duration: number;
    /** 详细信息 */
    details?: Record<string, any>;
}
/** 成功码 */
export declare const SUCCESS_CODES: {
    readonly SUCCESS: "SUCCESS";
};
/** 不适用码 */
export declare const NOT_APPLICABLE_CODES: {
    readonly CONDITION_NOT_MET: "CONDITION_NOT_MET";
};
/** 错误码 */
export declare const ERROR_CODES: {
    readonly INVALID_CONFIG: "INVALID_CONFIG";
    readonly INVALID_CONTEXT: "INVALID_CONTEXT";
    readonly EVALUATION_ERROR: "EVALUATION_ERROR";
    readonly UNKNOWN_ERROR: "UNKNOWN_ERROR";
};
/**
 * 引擎配置选项
 */
export interface EngineOptions {
    /** 是否启用调试模式 */
    debug?: boolean;
    /** 是否启用追踪 */
    enableTrace?: boolean;
    /** 运算符处理器映射 */
    operatorHandlers?: Record<string, OperatorHandler>;
    /** 自定义错误处理器 */
    errorHandler?: (error: Error, context: RuntimeContext) => void;
}
/**
 * 运算符处理器
 */
export type OperatorHandler = (fieldValue: any, compareValue: any, rule: ConditionRule) => boolean;
