package com.ycwl.basic.product.capability;

/**
 * 重复购买检查策略枚举
 * 定义不同商品类型的重复购买检查规则
 */
public enum DuplicateCheckStrategy {

    /**
     * 不检查（如打印类商品）
     * 允许重复购买
     */
    NO_CHECK("NO_CHECK", "不检查"),

    /**
     * 检查唯一资源
     * 检查用户是否已购买过相同的独立资源
     * 查询逻辑:WHERE product_type = ? AND product_id = ?
     *
     * 适用商品:
     * - VLOG_VIDEO:检查是否购买过同一个视频
     * - PHOTO:检查是否购买过同一张照片
     * - 未来的VIDEO片段:检查是否购买过同一段视频
     */
    UNIQUE_RESOURCE("UNIQUE_RESOURCE", "唯一资源检查"),

    /**
     * 检查父资源/套餐
     * 检查用户是否已购买过该类型的任何商品
     * 查询逻辑:WHERE product_type = ?
     *
     * 适用商品:
     * - RECORDING_SET:购买过任意录像集后不能再购买
     * - PHOTO_SET:购买过任意照片集后不能再购买
     */
    PARENT_RESOURCE("PARENT_RESOURCE", "父资源检查"),

    /**
     * 自定义策略（通过扩展实现）
     * 预留扩展点，用于未来更复杂的检查逻辑
     */
    CUSTOM("CUSTOM", "自定义策略");

    private final String code;
    private final String description;

    DuplicateCheckStrategy(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据代码获取枚举值
     */
    public static DuplicateCheckStrategy fromCode(String code) {
        if (code == null) {
            return null;
        }
        for (DuplicateCheckStrategy strategy : DuplicateCheckStrategy.values()) {
            if (strategy.code.equals(code)) {
                return strategy;
            }
        }
        throw new IllegalArgumentException("未知的重复检查策略: " + code);
    }
}
