package org.dromara.mall.coupon.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.mall.coupon.domain.bo.MallCouponUserBo;
import org.dromara.mall.coupon.domain.vo.MallCouponUserVo;

import java.util.Collection;
import java.util.List;

/**
 * 用户优惠券Service接口
 *
 * @author pengles
 */
public interface MallCouponUserService {

    /**
     * 查询用户优惠券
     */
    MallCouponUserVo queryById(Long id);

    /**
     * 查询用户优惠券列表
     */
    TableDataInfo<MallCouponUserVo> queryPageList(MallCouponUserBo bo, PageQuery pageQuery);

    /**
     * 查询用户优惠券列表
     */
    List<MallCouponUserVo> queryList(MallCouponUserBo bo);

    /**
     * 查询用户可用优惠券列表
     */
    List<MallCouponUserVo> queryAvailableList(Long userId);

    /**
     * 用户领取优惠券
     */
    Boolean receiveCoupon(Long couponId);

    /**
     * 使用优惠券（订单结算时调用）
     */
    Boolean useCoupon(Long couponUserId, Long orderId);

    /**
     * 退还优惠券（订单取消时调用）
     */
    Boolean returnCoupon(Long couponUserId);

    /**
     * 批量删除用户优惠券信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 处理过期优惠券（定时任务调用）
     */
    void processExpiredCoupons();

}
