/*
 * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.coupon.comment.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.app.dto.CouponDto;
import com.yami.shop.bean.app.dto.CouponOrderDto;
import com.yami.shop.bean.app.dto.ProductDto;
import com.yami.shop.bean.param.OfflineHandleEventAuditParam;
import com.yami.shop.common.util.PageParam;
import com.yami.shop.coupon.comment.model.Coupon;

import javax.validation.Valid;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author lgh on 2018/12/27.
 */
public interface CouponService extends IService<Coupon> {

    void updateCouponAndCouponProds(@Valid Coupon coupon);

    void insertCouponAndCouponProds(@Valid Coupon coupon);

    Coupon getCouponAndCouponProdsByCouponId(Long id);

    void receive(Coupon coupon, String userId);

    /**
     * 定时任务，改变店铺优惠券的状态
     *
     * @param now
     */
    void changeCoupon(Date now);

    void putonCoupon(Date now);

    void deleteByCouponId(Long couponId);

    List<CouponDto> generalCouponList(String userId);

    IPage<CouponDto> getCouponListByStatus(IPage<CouponDto> page, String userId, Integer status);

    void deleteUserCouponByCouponId(String userId, Long couponId);

    List<CouponOrderDto> getCouponListByShopIds(String userId, Long shopId);

    /**
     * 获取已投放优惠券
     *
     * @param shopId
     * @return
     */
    List<Coupon> listPutonByShopId(Long shopId);

    List<Long> listCouponIdsByUserId(String userId);

    /**
     * 通过优惠券id获取商品列表
     *
     * @param page
     * @return
     */
    IPage<ProductDto> prodListByCoupon(PageParam<ProductDto> page, Coupon coupon);

    /**
     * 获取各个状态下优惠券个数
     *
     * @param userId
     * @return
     */
    Map<String, Long> getCouponCountByStatus(String userId);

    /**
     * 平台  --获取分页优惠券数据
     */
    IPage<Coupon> getPlatformPage(PageParam<Coupon> page, Coupon coupon);

    /**
     * 平台 --下线活动
     */
    void offline(Coupon coupon, String offlineReason, Long sysUserId);

    /**
     * 平台 --审核活动
     */
    void auditCoupon(OfflineHandleEventAuditParam offlineHandleEventAuditParam, Long sysUserId);

    /**
     * 申请活动审核
     *
     */
    void auditApply(Long eventId, Long couponId, String reapplyReason);

    /**
     *  移除优惠券缓存
     *
     * @param shopId
     */
    void removeCouponAndCouponProdsCache(Long shopId);

    void batchBindCouponByIds(List<Long> couponIds, String userId,Long shopId);

    /**
     * 获取  领优惠卷 接口的优惠券列表
     * @return
     */
    IPage<CouponDto> getCouponList(PageParam<CouponDto> page,String userId);
}
