package com.ycwl.basic.order.strategy;

import com.ycwl.basic.order.exception.DuplicatePurchaseException;
import com.ycwl.basic.product.capability.DuplicateCheckStrategy;

/**
 * 重复购买检查策略接口
 *
 * 设计原则:
 * 1. 单一职责: 每个策略只负责一种检查逻辑
 * 2. 开放扩展: 通过实现接口添加新策略
 * 3. 自动注册: Spring 自动扫描并注册所有实现类
 */
public interface IDuplicatePurchaseChecker {

    /**
     * 获取策略类型
     * 用于策略工厂的注册和查找
     *
     * @return 对应的 DuplicateCheckStrategy 枚举值
     */
    DuplicateCheckStrategy getStrategyType();

    /**
     * 执行重复购买检查
     *
     * @param context 检查上下文,包含用户ID、商品信息等
     * @throws DuplicatePurchaseException 如果检测到重复购买
     */
    void check(DuplicateCheckContext context) throws DuplicatePurchaseException;

    /**
     * 是否支持该商品类型
     * 默认实现:所有策略都支持所有商品类型
     * 可在具体实现中覆盖以限制适用范围
     *
     * @param productType 商品类型代码
     * @return true-支持, false-不支持
     */
    default boolean supports(String productType) {
        return true;
    }
}
