package com.ycwl.basic.pricing.service;

import com.ycwl.basic.pricing.dto.DiscountCombinationResult;
import com.ycwl.basic.pricing.dto.DiscountDetectionContext;
import com.ycwl.basic.pricing.dto.DiscountInfo;

import java.util.List;

/**
 * 优惠检测服务接口
 * 负责协调所有优惠提供者，计算最优优惠组合
 */
public interface IDiscountDetectionService {
    
    /**
     * 检测所有可用的优惠
     * @param context 检测上下文
     * @return 所有可用的优惠列表
     */
    List<DiscountInfo> detectAllAvailableDiscounts(DiscountDetectionContext context);
    
    /**
     * 计算最优优惠组合
     * @param context 检测上下文
     * @return 最优优惠组合结果
     */
    DiscountCombinationResult calculateOptimalCombination(DiscountDetectionContext context);
    
    /**
     * 预览优惠组合（不实际应用）
     * @param context 检测上下文
     * @return 预览结果
     */
    DiscountCombinationResult previewOptimalCombination(DiscountDetectionContext context);
    
    /**
     * 注册优惠提供者
     * @param provider 优惠提供者
     */
    void registerProvider(IDiscountProvider provider);
    
    /**
     * 获取所有已注册的优惠提供者
     * @return 优惠提供者列表
     */
    List<IDiscountProvider> getAllProviders();
}