package shop.alien.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import shop.alien.entity.store.LifeCoupon;
import shop.alien.entity.store.LifeDiscountCoupon;
import shop.alien.entity.store.vo.LifeDiscountCouponPlatformVo;
import shop.alien.entity.store.vo.LifeDiscountCouponVo;

import java.util.List;

/**
 * <p>
 * 优惠券表 Mapper 接口
 * </p>
 *
 * @author ssk
 * @since 2025-02-07
 */
public interface LifeDiscountCouponMapper extends BaseMapper<LifeDiscountCoupon> {

    /**
     * 分页查询优惠券关联店铺
     *
     * @param iPage        分页
     * @param queryWrapper 查询条件
     * @return IPage<LifeDiscountCouponVo>
     */
    @Select("select a.*, b.store_name  from life_discount_coupon a left join store_info b on a.store_id = b.id ${ew.customSqlSegment}")
    IPage<LifeDiscountCouponPlatformVo> selectPageList(IPage<LifeDiscountCouponPlatformVo> iPage, @Param(Constants.WRAPPER) QueryWrapper<LifeDiscountCouponPlatformVo> queryWrapper);

    /**
     * 查询平台优惠券详情
     *
     * @param id 柱间, 妈的就叫这个吧! 哈西辣妈!
     * @return LifeDiscountCouponPlatformVo
     */
    @Select("select a.*, b.store_name  from life_discount_coupon a left join store_info b on a.store_id = b.id where a.store_id= #{id}")
    LifeDiscountCouponPlatformVo getOnePlatformCoupon(@Param("id") Integer id);


    /**
     * 查询平台优惠券详情
     *
     * @param id
     * @return LifeDiscountCouponPlatformVo
     */
    @Update("UPDATE life_discount_coupon SET single_qty = #{singleQty} where id= #{id}")
    Integer updateCouponById(@Param("id") Integer id, @Param("singleQty") Integer singleQty);


    List<LifeDiscountCouponVo> getList(String storeId,int couponStatus,Integer type);

    /**
     * 关联 life_coupon 查询代金券（仅 type=4）：按店铺、券状态、有库存
     *
     * @param storeId      店铺ID
     * @param couponStatus 券状态
     * @return 符合条件的 life_discount_coupon 列表
     */
    List<LifeDiscountCoupon> selectListJoinLifeCoupon(@Param("storeId") String storeId, @Param("couponStatus") Integer couponStatus);

    /**
     * 单表查询 life_discount_coupon（type 不为 4 时使用）
     *
     * @param storeId      店铺ID
     * @param couponStatus 券状态
     * @param type         类型，可为 null（不按 type 过滤）
     * @param couponType   优惠券类型：1=满减券，2=折扣券，可为 null（不按 couponType 过滤）
     * @return 符合条件的 life_discount_coupon 列表
     */
    List<LifeDiscountCoupon> selectListSingleTable(@Param("storeId") String storeId, @Param("couponStatus") Integer couponStatus, @Param("type") Integer type, @Param("couponType") Integer couponType);

    /**
     * 按主键查询优惠券模板（含逻辑删除），用于已派发券展示名称/面额/规则等场景
     */
    LifeDiscountCoupon selectByIdIncludeDeleted(@Param("id") Integer id);

    /**
     * 批量按主键查询优惠券模板（含逻辑删除），用于好友赠券列表等需保留已删模板快照的场景
     */
    List<LifeDiscountCoupon> selectByIdsIncludeDeleted(@Param("ids") List<Integer> ids);
}
