package com.ycwl.basic.pricing.service;

import com.github.pagehelper.PageInfo;
import com.ycwl.basic.pricing.dto.OnePriceConfigFilterRequest;
import com.ycwl.basic.pricing.dto.OnePriceInfo;
import com.ycwl.basic.pricing.entity.PriceOnePriceConfig;

import java.math.BigDecimal;
import java.util.List;

/**
 * 一口价购买服务接口
 * 一口价：特定景区内所有商品的统一优惠价格
 */
public interface IOnePricePurchaseService {
    
    /**
     * 检查指定景区是否适用一口价
     * 
     * @param scenicId 景区ID
     * @return 是否适用
     */
    boolean isOnePriceApplicable(Long scenicId);
    
    /**
     * 获取指定景区的一口价信息
     * 
     * @param scenicId 景区ID
     * @param currentAmount 当前总金额（用于计算优惠）
     * @return 一口价信息，如果不适用则返回null
     */
    OnePriceInfo getOnePriceInfo(Long scenicId, BigDecimal currentAmount);
    
    /**
     * 获取所有启用的一口价配置
     * 
     * @return 一口价配置列表
     */
    List<PriceOnePriceConfig> getActiveConfigs();
    
    /**
     * 根据景区查询启用的一口价配置
     * 
     * @param scenicId 景区ID
     * @return 一口价配置列表
     */
    List<PriceOnePriceConfig> getActiveConfigsByScenic(Long scenicId);
    
    /**
     * 根据景区查询启用的一口价配置（单个）
     * 通常每个景区只有一个生效的一口价配置
     * 
     * @param scenicId 景区ID
     * @return 一口价配置，如果不存在则返回null
     */
    PriceOnePriceConfig getActiveConfigByScenic(Long scenicId);
    
    // ==================== 管理端接口 ====================
    
    /**
     * 创建一口价配置
     * 
     * @param config 配置信息
     * @return 配置ID
     */
    Long createConfig(PriceOnePriceConfig config);
    
    /**
     * 更新一口价配置
     * 
     * @param config 配置信息
     * @return 是否更新成功
     */
    boolean updateConfig(PriceOnePriceConfig config);
    
    /**
     * 删除一口价配置
     * 
     * @param id 配置ID
     * @return 是否删除成功
     */
    boolean deleteConfig(Long id);
    
    /**
     * 启用/禁用一口价配置
     * 
     * @param id 配置ID
     * @param isActive 是否启用
     * @return 是否操作成功
     */
    boolean updateConfigStatus(Long id, Boolean isActive);
    
    /**
     * 根据ID查询配置
     * 
     * @param id 配置ID
     * @return 配置信息
     */
    PriceOnePriceConfig getConfigById(Long id);
    
    /**
     * 分页查询一口价配置
     * 
     * @param request 筛选请求参数
     * @return 分页结果
     */
    PageInfo<PriceOnePriceConfig> pageConfigs(OnePriceConfigFilterRequest request);
    
    /**
     * 查询所有配置（包含禁用的）- 管理端使用
     * 
     * @return 配置列表
     */
    List<PriceOnePriceConfig> getAllConfigsForAdmin();
}