package com.ycwl.basic.product.service;

import com.ycwl.basic.product.capability.DuplicateCheckStrategy;
import com.ycwl.basic.product.capability.PricingMode;
import com.ycwl.basic.product.capability.ProductTypeCapability;

/**
 * 商品类型能力服务接口
 * 提供商品类型能力配置的查询和管理功能
 *
 * 设计原则：
 * 1. 缓存优先：所有查询都支持缓存，提高性能
 * 2. 降级兜底：查询失败时返回安全的默认配置
 * 3. 接口简洁：提供便捷方法，简化调用方代码
 */
public interface IProductTypeCapabilityService {

    /**
     * 获取商品类型能力配置（支持缓存）
     *
     * @param productType 商品类型代码（如 VLOG_VIDEO）
     * @return 商品类型能力配置，查询失败时返回默认配置
     */
    ProductTypeCapability getCapability(String productType);

    /**
     * 获取商品显示名称
     *
     * @param productType 商品类型代码
     * @return 显示名称，查询失败时返回"景区商品"
     */
    String getDisplayName(String productType);

    /**
     * 判断是否允许重复购买
     *
     * @param productType 商品类型代码
     * @return true-允许重复购买, false-不允许
     */
    boolean allowDuplicatePurchase(String productType);

    /**
     * 获取定价模式
     *
     * @param productType 商品类型代码
     * @return 定价模式枚举
     */
    PricingMode getPricingMode(String productType);

    /**
     * 获取重复检查策略
     *
     * @param productType 商品类型代码
     * @return 重复检查策略枚举
     */
    DuplicateCheckStrategy getDuplicateCheckStrategy(String productType);

    /**
     * 刷新缓存
     * 用于配置更新后手动触发缓存刷新
     */
    void refreshCache();

    /**
     * 刷新指定商品类型的缓存
     *
     * @param productType 商品类型代码
     */
    void refreshCache(String productType);
}
