package com.yida.data.device.consume.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yida.data.device.dto.consume.CreateConsumeOrderDTO;
import com.yida.data.device.dto.consume.H5ConsumeOrderPageDTO;
import com.yida.data.device.dto.consume.H5ConsumeRecordPageDTO;
import com.yida.data.device.vo.consume.ConsumePayInfoVO;
import com.yida.data.device.vo.consume.ConsumeVipVO;
import com.yida.data.device.vo.consume.H5ConsumeOrderPageVO;
import com.yida.data.device.vo.consume.H5ConsumeRecordPageVO;

import java.time.LocalDateTime;

/**
 * 消费机前端service
 *
 * @author ZYJ
 * @date 2023/3/16
 */
public interface H5ConsumeService {

    /**
     * 查询学生消费机会员状态
     *
     * @param studentId 学生id
     * @param schoolId  学校id
     * @return com.yida.data.device.vo.consume.ConsumeVipVO
     * @author ZYJ
     * @date 2023/3/16 15:52
     */
    ConsumeVipVO checkVip(Long studentId, Long schoolId);

    /**
     * 挂失
     *
     * @param studentId 学生id
     * @return java.lang.String
     * @author ZYJ
     * @date 2023/3/30 9:38
     */
    String reportLoss(Long studentId);

    /**
     * 解冻
     *
     * @param studentId 学生id
     * @return java.lang.String
     * @author ZYJ
     * @date 2023/3/30 9:39
     */
    String unfreeze(Long studentId);

    /**
     * 生成消费订单(充值)
     *
     * @param dto 生成消费订单请求类
     * @return com.yida.data.device.vo.consume.ConsumePayInfoVO
     * @author ZYJ
     * @date 2023/3/22 16:37
     */
    ConsumePayInfoVO createConsumeOrder(CreateConsumeOrderDTO dto);

    /**
     * 消费订单完成(前台支付成功后调用)
     *
     * @param orderCode 订单号
     * @author ZYJ
     * @date 2023/3/23 16:43
     */
    void consumeOrderSuccess(String orderCode);

    /**
     * 消费订单支付成功
     *
     * @param orderCode 订单号
     * @param payDate   支付完成时间
     * @author ZYJ
     * @date 2023/3/23 17:06
     */
    void consumeOrderPaySuccess(String orderCode, LocalDateTime payDate);

    /**
     * 前端查询消费订单列表数据(充值记录)
     *
     * @param dto 消费订单列表请求类(充值记录)
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.device.vo.consume.H5ConsumeOrderPageVO>
     * @author ZYJ
     * @date 2023/3/24 14:26
     */
    IPage<H5ConsumeOrderPageVO> listH5ConsumeOrderPage(H5ConsumeOrderPageDTO dto);

    /**
     * 前端查询消费订单详情(充值记录)
     *
     * @param orderId   订单id
     * @param orderCode 订单号
     * @return com.yida.data.device.vo.consume.H5ConsumeOrderPageVO
     * @author ZYJ
     * @date 2023/3/24 14:43
     */
    H5ConsumeOrderPageVO getH5ConsumeOrderInfo(Long orderId, String orderCode);

    /**
     * 继续支付
     *
     * @param orderCode 订单号
     * @param deptId    学校id
     * @return com.yida.data.device.vo.consume.ConsumePayInfoVO
     * @author ZYJ
     * @date 2023/3/24 14:49
     */
    ConsumePayInfoVO continuePayOrder(String orderCode, Long deptId);

    /**
     * 取消订单
     *
     * @param orderCode 订单号
     * @author ZYJ
     * @date 2023/3/30 14:14
     */
    void cancelOrder(String orderCode);

    /**
     * 前端查询学生消费记录列表
     *
     * @param dto 消费机学生消费记录列表请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.device.vo.consume.H5ConsumeRecordPageVO>
     * @author ZYJ
     * @date 2023/3/24 16:55
     */
    IPage<H5ConsumeRecordPageVO> listH5ConsumeRecordPage(H5ConsumeRecordPageDTO dto);
}
