package com.ruoyi.ss.pay.service;

import com.ruoyi.ss.channel.domain.ChannelVO;
import com.ruoyi.ss.order.domain.OrderBO;
import com.ruoyi.ss.order.domain.OrderVO;
import com.wechat.pay.java.service.payments.jsapi.model.PrepayWithRequestPaymentResponse;
import com.wechat.pay.java.service.refund.model.Refund;

import java.math.BigDecimal;

/**
 * 微信支付服务接口
 * @author qzz
 * 2024/3/11
 */
public interface IWxPayService {

    /**
     * 生成微信预支付订单
     * @param order 平台订单
     * @return JSAPI调用
     */
    PrepayWithRequestPaymentResponse prepayWithRequestPayment(OrderBO order);


//    /**
//     * 通过商户订单号查询订单信息
//     * @param outTradeNo 商户订单号
//     * @return 订单信息
//     */
//    PaymentResult queryOrderByOutTradeNo(String outTradeNo);

    /**
     * 关闭订单
     * @param outTradeNo 商户订单号
     * @return 订单信息
     */
    boolean closeOrder(String outTradeNo, ChannelVO channelVO);

//    /**
//     * 根据订单号查询订单支付结果
//     * @param orderNo 订单号
//     * @return 订单信息
//     */
//    Boolean queryResultByOrderNo(String orderNo);

    /**
     * 退款
     * @param etOrder 原订单对象
     *                   paid、payChannel、payFee
     * @param reason 退款原因
     * @param amount 退款金额
     * @param outRefundNo 退款订单号
     * @param payNo 支付单号
     */
    void refund(OrderVO etOrder, String reason, BigDecimal amount, String outRefundNo, String payNo);

//    /**
//     * 发起商家转账
//     * @param sysDept 运营商对象
//     * @param batchNo 批次号
//     * @param batchName 批次名称
//     * @param batchRemark 转账说明
//     * @param totalAmount 转账总金额
//     * @param totalNum 转账总笔数
//     * @param transferDetailInputs 转账明细列表
//     */
//    InitiateBatchTransferResponse transfer(SysDept sysDept,String batchNo,String batchName,String batchRemark,BigDecimal totalAmount,Integer totalNum,List<TransferDetailInput> transferDetailInputs);

    /**
     * 根据退款单号查询退款信息
     * @param outRefundNo 退款单号
     */
    Refund queryByOutRefundNo(String outRefundNo);


//    /**
//     * 根据运营区id获取运营商对象
//     * @param areaId 运营区id
//     */
//    public SysDept getDeptObjByAreaId(Long areaId);


    /**
     * 请求分账API
     * @param sysDept 运营商
     * @param transactionId 微信支付单号
     * @param receivers  分账接收方
     */
//    public OrdersEntity createOrder(SysDept sysDept, String transactionId, List<CreateOrderReceiver> receivers);

//    /**
//     * 添加分账接收方
//     * @param wxopenid openid
//     * @param deptId 运营商id
//     */
//    AddReceiverResponse addReceiver(String wxopenid,Long deptId,String type);
//
//    /**
//     * 删除分账接收方
//     * @param wxopenid openid
//     * @param deptId 运营商id
//     */
//    DeleteReceiverResponse deleteReceiver(String wxopenid,Long deptId,String type);

}
