package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCouponSend;
import com.iformall.domain.vo.WxCouponSendVo;
import com.iformall.enums.EnumCouponSendSendType;

import javax.validation.constraints.NotNull;

public interface WxCouponSendService {

	/**
     * 根据实体查询分页列表
     *
     * @param record
     * @param pageIndex
     * @param pageSize
     * @return
     */
	PageInfo<WxCouponSendVo> listAsPage(WxCouponSend record, Integer pageIndex, Integer pageSize);

	/**
     * 根据Id获得实体
     *
     * @param id
     * @return
     */
    WxCouponSend getById(Long id);
    
        /**
     * 保存或更新实体
     *
     * @param record
     */
    void saveOrUpdate(WxCouponSend record);

    /**
     * 更新为无效
     * @param record
     */
    void updateInvalid(WxCouponSend record) ;

    /**
     * 根据Id删除实体
     *
     * @param id
     */
    void deleteById(Long id);

    /**
     *停车或核销给用户注入卡券
     * @param tenantId
     * @param cUserId
     * @param type 2：停车发券 3：核销发券
     */
    boolean sendCouponToUser(EnumCouponSendSendType type, Object param);

    void updateStatusByCouponId(Long couponId,String tenantId, int status);

    /**
     * 添加或更新生日券配置
     * @param beforeDays
     * @param sendType
     * @param tenantId
     */
    void saveOrUpdateConfig(Integer beforeDays, Integer sendType, String tenantId) ;
    /**
     * 获取生日券配置
     * @param sendType
     * @param tenantId
     * @return
     */
    WxCouponSend getConfig(Integer sendType,String tenantId) ;

    /**
     * 商户注券 库存减少
     *
     * @param id              券ID
     * @param merchantRemain  当前库存
     * @param merchantSend    当前已发
     * @param number          减少数量
     */
    void reduceMerchantSend(Long id, Integer merchantRemain, Integer merchantSend ,Integer number);

    /**
     * 商户注券 库存退回
     *
     * @param id              券ID
     * @param merchantRemain  当前库存
     * @param merchantSend    当前已发
     * @param number          回退数量
     */
    void backMerchantRemainInventory(Long id, Integer merchantRemain, Integer merchantSend ,Integer number);

    /**
     *
     * @param wxCouponSend
     */
    void handSel(WxCouponSend wxCouponSend,Long cUserId) ;


}
