package cn.ysk.cashier.mybatis.service;

import cn.ysk.cashier.dto.CouponDto;
import cn.ysk.cashier.dto.QueryReceiveDto;
import cn.ysk.cashier.mybatis.entity.TbActivateInRecord;
import cn.ysk.cashier.mybatis.entity.TbActivateOutRecord;
import cn.ysk.cashier.mybatis.entity.TbCouponProduct;
import cn.ysk.cashier.mybatis.vo.TbShopCouponVo;
import cn.ysk.cashier.pojo.order.TbCashierCart;
import cn.ysk.cashier.pojo.order.TbOrderDetail;
import cn.ysk.cashier.pojo.order.TbOrderInfo;
import cn.ysk.cashier.pojo.shop.TbShopUser;
import cn.ysk.cashier.vo.QueryReceiveVo;
import cn.ysk.cashier.vo.TbUserCouponVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.ysk.cashier.mybatis.entity.TbShopCoupon;
import cn.ysk.cashier.dto.TbShopCouponQueryCriteria;
import org.springframework.http.ResponseEntity;

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

/**
 * 优惠券(TbShopCoupon)表服务接口
 *
 * @author ww
 * @since 2024-10-22 15:43:25
 */
public interface TbShopCouponService extends IService<TbShopCoupon> {

    Map<String, Object> queryAll(TbShopCouponQueryCriteria criteria);

    Map<String, Object> queryReceive(QueryReceiveDto param);
    TbShopCoupon findById (Integer id);

    boolean update(TbShopCouponVo param);
    boolean delete(Integer[] ids);

    /**
     * 根据金额获取可用优惠券数据
     * @param tbShopUser 店铺id
     * @param orderAmount 用户id
     * @param productIds 商品id
     * @return 优惠券信息
     */
    List<TbUserCouponVo> getActivateCoupon(TbShopUser tbShopUser, BigDecimal orderAmount, Integer shopId, Set<String> productIds);

    boolean deleteReceive(Integer[] ids);

    ResponseEntity<Object> find(CouponDto param);

    boolean use(Integer shopId,Integer orderId,Integer vipUserId,List<TbActivateOutRecord> param);

    boolean refund(List<TbActivateOutRecord> param);

    List<TbCouponProduct> findActivatePros(Integer couponId);

    /**
     * 根据优惠券id查询优惠券信息
     * @param couponIds 优惠券id
     */
    List<TbShopCoupon> selectByIds(List<Integer> couponIds);

    /**
     * 根据订单id获取当前用户可用优惠券信息
     * @param shopId 店铺id
     * @param orderId 订单id
     * @param memberId 会员id
     */
    Object getActivateByOrderIds(Integer shopId, Integer orderId, Integer memberId);

}

