import type { StrategyConfig, EvaluationResult } from '../../type';
export declare const ITEM_RULE_ACTION_TYPES: {
    /** 数量校验 */
    readonly QUANTITY_CHECK: "QUANTITY_CHECK";
    /** 预填购物车 */
    readonly PREFILL_CART: "PREFILL_CART";
};
export type ItemRuleActionType = (typeof ITEM_RULE_ACTION_TYPES)[keyof typeof ITEM_RULE_ACTION_TYPES];
export declare const ITEM_RULE_TEMPLATES: {
    /** 空白规则 */
    readonly BLANK: "blank";
    /** 人数关联最少量（每人至少N份） */
    readonly MINIMUM_PER_PERSON: "minimum_per_person";
    /** 每桌限量 */
    readonly MAXIMUM_PER_TABLE: "maximum_per_table";
    /** 必选商品 */
    readonly MUST_INCLUDE: "must_include";
};
export type ItemRuleTemplate = (typeof ITEM_RULE_TEMPLATES)[keyof typeof ITEM_RULE_TEMPLATES];
/** 数量比较类型 */
export type QuantityComparison = 'minimum' | 'maximum' | 'exact' | 'must_include';
/** 数量来源 */
export type QuantitySource = 'total_pax' | 'adult_pax' | 'fixed';
/** 目标类型（当前仅支持按商品） */
export type TargetType = 'product';
/** 作用范围 */
export type RuleScope = 'each_submission' | 'first_submission_only' | 'subsequent_only' | 'cumulative';
/**
 * 单条数量规则
 *
 * 例如：Minimum + Total Pax 表示"最少数量 = 总人数"
 * 例如：Maximum + Fixed + 10 表示"最多10份"
 */
export interface QuantityRule {
    /** 比较方式 */
    comparison: QuantityComparison;
    /** 数量来源 */
    source: QuantitySource;
    /** 固定值（当 source 为 'fixed' 时使用） */
    value?: number;
}
/**
 * Quantity Check Action 的详细配置
 *
 * 存储在 ActionEffect.config 中
 */
export interface QuantityCheckConfig {
    /** 目标类型 */
    targetType: TargetType;
    /** 目标商品 ID 列表 */
    targets: TargetItem[];
    /** 数量规则列表（多条规则同时生效） */
    quantityRules: QuantityRule[];
    /** 作用范围 */
    scope: RuleScope;
    /** 校验失败时的提示语，支持 {min} {max} 占位符，支持多语言 */
    validationMessage?: string | Record<string, string>;
}
/** 目标项 */
export interface TargetItem {
    /** 目标商品 ID */
    product_id: number;
    /** 变体 ID */
    product_variant_id?: number;
}
/**
 * 预填商品项
 */
export interface PrefillProduct {
    /** 商品 ID */
    product_id: number;
    /** 变体 ID（可选，0 或不填表示无变体/默认） */
    product_variant_id?: number;
    /** 数量来源 */
    quantityFrom: QuantitySource;
    /** 固定数量（当 quantityFrom 为 'fixed' 时使用） */
    quantity?: number;
}
/**
 * Prefill Cart Action 的详细配置
 *
 * 存储在 ActionEffect.config 中
 */
export interface PrefillCartConfig {
    /** 要预填的商品列表 */
    products: PrefillProduct[];
}
/**
 * 购物车商品摘要
 */
export interface CartItemSummary {
    /** 商品 ID */
    product_id: number;
    /** 变体 ID */
    product_variant_id?: number;
    /** 数量 */
    quantity: number;
}
/**
 * 就餐人数信息
 */
export interface PaxInfo {
    /** 总人数 */
    total: number;
    /** 成人人数 */
    adult: number;
    /** 儿童人数 */
    child: number;
}
/**
 * ItemRule 评估器的输入业务数据
 */
export interface ItemRuleBusinessData {
    /** 就餐人数 */
    pax: PaxInfo;
    /** 当前购物车商品列表 */
    cartItems: CartItemSummary[];
    /** 历史订单商品列表（用于 cumulative scope，主订单+加单的商品汇总） */
    historicalItems?: CartItemSummary[];
    /** 服务类型（如 'dine-in', 'takeaway'） */
    serviceType?: string;
    /** 当前提交次数（0=首次提交, >0=追加提交） */
    submissionIndex?: number;
    /** 策略配置列表（可选，如果不传则使用 setStrategyConfigs 设置的） */
    strategyConfigs?: StrategyConfig[];
    /** 自定义属性（会合并到 context.attributes） */
    custom?: Record<string, any>;
}
/**
 * 单个 Quantity Check 的校验结果
 */
export interface QuantityCheckResult {
    /** 规则 ID（对应 ActionEffect.id） */
    ruleId: string;
    /** 是否通过校验 */
    passed: boolean;
    /** 目标类型 */
    targetType: TargetType;
    /** 目标列表 */
    targets: TargetItem[];
    /** 当前购物车中的实际数量 */
    actualQuantity: number;
    /** 要求的最小数量（根据规则计算后的值） */
    requiredMin?: number;
    /** 要求的最大数量 */
    requiredMax?: number;
    /** 要求的精确数量 */
    requiredExact?: number;
    /** 是否必须包含（must_include） */
    mustInclude?: boolean;
    /** 格式化后的校验提示语 */
    validationMessage?: string;
    /** 作用范围 */
    scope: RuleScope;
    /** 未通过的具体规则 */
    failedRules?: QuantityRule[];
}
/**
 * 单个 Prefill Cart 的预填结果
 */
export interface PrefillItemResult {
    /** 规则 ID（对应 ActionEffect.id） */
    ruleId: string;
    /** 商品 ID */
    product_id: number;
    /** 变体 ID */
    product_variant_id?: number;
    /** 应添加的数量 */
    quantity: number;
}
/**
 * 单条规则的数量限制（不含校验结果，仅描述配置中的约束）
 */
export interface QuantityLimitResult {
    /** 规则 ID（对应 ActionEffect.id） */
    ruleId: string;
    /** 目标类型 */
    targetType: TargetType;
    /** 目标列表 */
    targets: TargetItem[];
    /** 要求的最小数量 */
    requiredMin?: number;
    /** 要求的最大数量（规则配置的原始上限，用于 UI 文案展示） */
    requiredMax?: number;
    /**
     * 当前提交剩余可选的最大数量。
     *
     * 仅在 scope='cumulative' 且存在 requiredMax 时计算：
     *   remainingMax = max(0, requiredMax - historicalItems 中目标商品累计数量)
     *
     * 非 cumulative 场景不设置此字段；调用方用于限制加购上限时，
     * 应优先读取本字段，未定义时回退到 requiredMax。
     */
    remainingMax?: number;
    /** 要求的精确数量 */
    requiredExact?: number;
    /** 是否必须包含 */
    mustInclude?: boolean;
    /** 作用范围 */
    scope: RuleScope;
    /**
     * 校验失败时的提示语（已做 {min}/{max}/{exact} 占位符替换）。
     * 当 rawValidationMessage 为多语言对象时，后端不做 locale 选择，
     * 默认按 en → Object.values()[0] 的顺序兜底，前端可再根据自身 locale
     * 读取 rawValidationMessage 做精确匹配。
     */
    validationMessage?: string;
    /** 原始多语言模板，前端可根据自身 locale 做二次选择 */
    rawValidationMessage?: string | Record<string, string>;
}
/**
 * ItemRule 评估器的完整输出结果
 */
export interface ItemRuleEvaluationResult {
    /** 所有数量校验结果 */
    quantityChecks: QuantityCheckResult[];
    /** 需要预填的商品列表 */
    prefillItems: PrefillItemResult[];
    /** 所有校验是否全部通过 */
    allPassed: boolean;
    /** 未通过的校验列表 */
    failedChecks: QuantityCheckResult[];
    /** 原始策略评估结果列表 */
    rawResults: EvaluationResult[];
}
