
package com.tmerclub.cloud.api.coupon.feign;

import com.tmerclub.cloud.api.coupon.dto.BindCouponDTO;
import com.tmerclub.cloud.api.coupon.dto.ReceiveCouponDTO;
import com.tmerclub.cloud.api.coupon.vo.CouponDataVO;
import com.tmerclub.cloud.api.coupon.vo.CouponUserCountDataVO;
import com.tmerclub.cloud.common.product.vo.SpuCouponAppVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.Date;
import java.util.List;

/**
 * 优惠券
 * @author tmerclub
 * @date 2020/12/17
 */
public interface CouponFeignClient {

    /**
     * 根据优惠券id列表，获取优惠券列表
     * @param couponIds
     * @return sku信息
     */
    ServerResponseEntity<List<CouponDataVO>> getCouponListByCouponIds(List<Long> couponIds);

    /**
     * 根据优惠券id列表，投放状态，获取优惠券列表
     * @param couponIds 优惠券ids
     * @param putOnStatus 投放状态
     * @return sku信息
     */
    ServerResponseEntity<List<CouponDataVO>> getCouponListByCouponIdsAndPutOnStatus(List<Long> couponIds, Integer putOnStatus);

    /**
     * 绑定优惠券（平台赠送优惠券给用户）
     * @param bindCouponDTO
     * @return
     */
    ServerResponseEntity<Void> batchBindCouponByCouponIds(BindCouponDTO bindCouponDTO);


    /**
     * 获取可使用的优惠券数量
     * @return 可使用的优惠券数量
     */
    ServerResponseEntity<Long> countCanUseCoupon();

    /**
     * 商品详情的优惠券列表
     *
     * @param shopId
     * @param spuId
     * @return
     */
    ServerResponseEntity<List<SpuCouponAppVO>> couponOfSpuDetail(Long shopId, Long spuId);

    /**
     * 统计用户优惠券信息
     * @param userId
     * @param shopId
     * @return
     */
    ServerResponseEntity<CouponUserCountDataVO> countCouponUserByUserId(Long userId, Long shopId);

    /**
     * 获取领券会员数
     * @param shopId 店铺id
     * @param startTime 起始时间
     * @param endTime 结束时间
     * @return 领券会员数
     */
    ServerResponseEntity<List<Long>> countMemberCouponByParam(Long shopId,Date startTime, Date endTime);

    /**
     * 处理商品下线
     *
     * @param spuIds 商品id列表
     * @param shopIds 店铺id
     * @return
     */
    ServerResponseEntity<Void> handleSpuOffline(List<Long> spuIds, List<Long> shopIds);

    /**
     * 处理店铺下线
     *
     * @param shopIds 店铺id
     * @return
     */
    ServerResponseEntity<Void> handleShopOffline(List<Long> shopIds);

    /**
     * 统计用户领取优惠券数量
     * @param receiveCouponDTO
     * @return
     */
    ServerResponseEntity<List<Long>> userReceiveCouponCount(ReceiveCouponDTO receiveCouponDTO);

    /**
     * 获取优惠券库存
     * @param couponId
     * @return
     */
    ServerResponseEntity<Integer> getStockByCouponId(Long couponId);

    /**
     * 直接向用户发放代金卷
     * @return
     */
    void sendUserCoupon(Long shopId,Long userId, Long reduceAmount);
}
