package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxCUser;
import com.iformall.domain.po.WxCouponOrder;
import com.iformall.domain.po.WxMerchantBUser;
import com.iformall.domain.po.WxOrder;
import com.iformall.domain.vo.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface WxCouponOrderService {

	/**
     * 根据实体查询分页列表
     *
     * @param record
     * @param pageIndex
     * @param pageSize
     * @return
     */
	PageInfo<WxCouponOrder> listAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize);
	
	/**
     * 根据Id获得实体
     *
     * @param id
     * @return
     */
    WxCouponOrder getById(Long id);
    
        /**
     * 保存或更新实体
     *
     * @param record
     */
    void saveOrUpdate(WxCouponOrder record);


    /**
     * 根据Id删除实体
     *
     * @param id
     */
    void deleteById(Long id);
    /**
     * 根据主键couponOrderId(券码)核销
     *
     * @param couponOrder
     * @param bUser 核销人(登录用户)
     */
    WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser);

    /**
     * 核销后发送消息
     */
    void sendInsideCouponVerifyMsg(String tenantId, Long couponOrderId, Long buUserId);

    /**
     * 核销后处理
     *
     * @param couponOrder
     * @param bUser 核销人(登录用户)
     */
    void actionAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser);

    /**
     * 核销发券
     * @param couponOrder
     * @param bUser
     */
    boolean sendCouponAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser);

    /**
     * B端刷卡支付发券
     * @param tenantId
     * @param orderId
     * @param cUserId
     */
    boolean sendCouponAfterMicroPay(String tenantId, Long orderId, Long cUserId);

    /**
     * 核销分账
     * @param couponOrder
     */
    void shareAfterVerify(WxCouponOrder couponOrder, Long merchantId);

    /**
     * 核销后补贴
     * @param couponOrder
     */
    void subsidyAfterVerify(WxCouponOrder couponOrder, Long merchantId);
    /**
     * 核销模板消息
     * @param couponOrder
     * @param bUser
     */
    void sendVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser, boolean hadSentCoupon);

    /**
     * 根据日期 b用户查券list
     *
     * @param bUserId B端用户)
     */

    ResultData listOnDateAsPage(Long bUserId, String date, Integer pageIndex, Integer pageSize, boolean isVerified);

    /**
     * C用户查券list
     *
     * @param record C端用户
     */

    PageInfo<WxCouponOrderCVo> listCUserVoAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize);

    /**
     * C用户查券详情
     *
     */
    WxCouponOrderCVo detailCUserVo(String couponOrderId);

    /**
     * C用户查券carlist
     *
     * @param record C端用户
     */

    ResultData carListCUserVoAsPage(WxCouponOrder record, Integer pageIndex, Integer pageSize);

    List<WxCouponOrderCarCVo> carListCUserVo(WxCouponOrder record);


    /**
     * B用户查券详情
     *
     * @param bUserId B端用户
     */
    ResultData detailBUserVo(Long bUserId, String couponOrderId);

    /**
     * A端查询分页列表
     *
     * @param wxCouponOrder
     * @param pageIndex
     * @param pageSize
     * @return
     */
    ResultData listAdminAsPage(WxCouponOrderBVo wxCouponOrder, Integer pageIndex, Integer pageSize);


    ResultData detailAdminVo(Long couponOrderId);

    /**
	 * 日期分组 消费总数
	 * @param tenantId
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	List<CUserDateAmountVo> queryPriceTotalGroup(String tenantId,  Date startTime,Date endTime);
	/**
	 * 查询消费额
	 * @return
	 */
	int queryPriceTotal(WxCouponOrder wxCouponOrder);


	////// ------- 卡
    /**
     * C用户查卡list
     *
     * @param record C端用户
     */

    ResultData listCardVoAsPage(WxCardCVo record, Integer pageIndex, Integer pageSize);

    /**
     * C用户查卡详情
     *
     * @param ownerId C端用户
     */
    ResultData cardDetailCUserVo(Long ownerId, String couponOrderId);

    ResultData cardAccept(WxCouponOrder wxCouponOrder);

    ResultData queryCardStatus(WxCouponOrder wxCouponOrder);

    void exportData(WxCouponOrderBVo wxCouponOrder, HttpServletRequest request, HttpServletResponse response);

    /**
     * B端-收银台-支持优惠券
     */
    List<WxCouponOrderCVo> queryMicroPayCouponOrder(WxMerchantBUser user, WxCUser cUser, Integer price);

    Integer microPayVerify(WxOrder microOrder, WxCouponOrder couponOrder, WxMerchantBUser bUser, Integer price);

}
