package com.ycwl.basic.pricing.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ycwl.basic.pricing.entity.PriceProductConfig;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * 商品价格配置Mapper
 */
@Mapper
public interface PriceProductConfigMapper extends BaseMapper<PriceProductConfig> {
    
    /**
     * 查询启用的商品配置
     */
    @Select("SELECT * FROM price_product_config WHERE is_active = 1")
    List<PriceProductConfig> selectActiveConfigs();
    
    /**
     * 根据商品类型查询配置
     */
    @Select("SELECT * FROM price_product_config WHERE product_type = #{productType} AND is_active = 1")
    List<PriceProductConfig> selectByProductType(String productType);
    
    /**
     * 根据商品类型和商品ID查询配置
     */
    @Select("SELECT * FROM price_product_config WHERE product_type = #{productType} AND product_id = #{productId} AND is_active = 1")
    PriceProductConfig selectByProductTypeAndId(String productType, String productId);

    /**
     * 根据商品类型和商品ID查询全局配置（排除景区级配置）
     */
    @Select("SELECT * FROM price_product_config WHERE product_type = #{productType} AND product_id = #{productId} AND (scenic_id IS NULL OR scenic_id = '') AND is_active = 1")
    PriceProductConfig selectGlobalByProductTypeAndId(String productType, String productId);

    /**
     * 根据商品类型、商品ID和景区ID查询配置（支持景区维度）
     */
    @Select("SELECT * FROM price_product_config WHERE product_type = #{productType} AND product_id = #{productId} AND scenic_id = #{scenicId} AND is_active = 1")
    PriceProductConfig selectByProductTypeIdAndScenic(@Param("productType") String productType,
                                                        @Param("productId") String productId,
                                                        @Param("scenicId") String scenicId);
    
    /**
     * 检查是否存在default配置（包含禁用的）
     */
    @Select("SELECT COUNT(*) FROM price_product_config WHERE product_type = #{productType} AND product_id = 'default'")
    int countDefaultConfigsByProductType(@Param("productType") String productType);
    
    // ==================== 管理端接口（包含禁用的配置） ====================
    
    /**
     * 查询所有商品配置（包含禁用的）- 管理端使用
     */
    @Select("SELECT * FROM price_product_config ORDER BY product_type ASC, is_active DESC, product_id ASC")
    List<PriceProductConfig> selectAllConfigsForAdmin();
    
    /**
     * 根据商品类型查询所有配置（包含禁用的）- 管理端使用
     */
    @Select("SELECT * FROM price_product_config WHERE product_type = #{productType} ORDER BY is_active DESC, product_id ASC")
    List<PriceProductConfig> selectByProductTypeForAdmin(@Param("productType") String productType);
    
    /**
     * 插入商品价格配置
     */
    @Insert("INSERT INTO price_product_config (product_type, product_id, scenic_id, product_name, base_price, original_price, unit, is_active, can_use_coupon, can_use_voucher, can_use_one_price, create_time, update_time) " +
            "VALUES (#{productType}, #{productId}, #{scenicId}, #{productName}, #{basePrice}, #{originalPrice}, #{unit}, #{isActive}, #{canUseCoupon}, #{canUseVoucher}, #{canUseOnePrice}, NOW(), NOW())")
    int insertProductConfig(PriceProductConfig config);
    
    /**
     * 更新商品价格配置
     */
    @Update("UPDATE price_product_config SET product_id = #{productId}, scenic_id = #{scenicId}, product_name = #{productName}, base_price = #{basePrice}, " +
            "original_price = #{originalPrice}, unit = #{unit}, is_active = #{isActive}, can_use_coupon = #{canUseCoupon}, can_use_voucher = #{canUseVoucher}, can_use_one_price = #{canUseOnePrice}, update_time = NOW() WHERE id = #{id}")
    int updateProductConfig(PriceProductConfig config);
    
    /**
     * 更新商品配置状态
     */
    @Update("UPDATE price_product_config SET is_active = #{isActive}, update_time = NOW() WHERE id = #{id}")
    int updateProductConfigStatus(@Param("id") Long id, @Param("isActive") Boolean isActive);
}