package com.liquidnet.service.goblin.service;

import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUseResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserCouponVo;
import com.liquidnet.service.goblin.param.*;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public interface GoblinCouponService {
    //根据spuId获取 该spu可参与的券活动
    ArrayList<String> getSpuType(String spuId, String storeId);

    //获取 类型券列表
    ArrayList<GoblinStoreCouponVo> getSpuByType(String spuId, String storeId, String type);

    //领取券
    Boolean receiveCoupon(String uid, List<GoblinUserCouponVo> userCouponVoList, GoblinStoreCouponVo storeCouponVo);

    //我的券列表 [类型 1可用 2过期/已使用]
    List<GoblinUserCouponVo> getList(String type);

    //是否可用券 [价格] [spuId逗号隔开] [uid]
    GoblinUserCouponVo canUse(BigDecimal totalPrice, String spuId, String uid,String storeId);

    //可用券列表 [价格] [spuId逗号隔开] [uid]
    List<GoblinUserCouponVo> useList(BigDecimal totalPrice, String spuId, String uid);

    //可用券列表[可用券列表[返回商品下所有券]]
    List<GoblinUserCouponVo> useList3(CouponCanUseAllParam param);

    List<GoblinUserCouponVo> useList2(CouponCanUseParam param);

    //使用券 [券id] [消费内容] [价格] [spuId逗号隔开]
    GoblinUseResultVo useCoupon(String ucouponId,String content, BigDecimal totalPrice, String spuId, String uid);

    //回退券 [list<Data>] [券id ， 用户id]
    Boolean backCoupon(List<BackCouponParam> params);

    /**
     *  帮前端写选择券逻辑
     * @param params
     * @return
     */
    CouponHelpUseVo helpUseCoupon(CouponHelpUseParam params);
}
