package com.cf.imes.module.system.service.pay;

import com.cf.imes.framework.pay.core.client.dto.order.PayOrderRespDTO;
import com.cf.imes.module.system.controller.admin.pay.vo.PayProductOrderUnifiedReqVO;
import com.cf.imes.module.system.dal.dataobject.pay.PayOrderDO;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 支付订单接口
 *
 * @author Gqr
 * @since 2025/4/17 17:29
 */
public interface PayOrderService {
    /**
     * 根据id查询支付订单
     *
     * @param id
     * @return
     */
    PayOrderDO get(Long id);

    /**
     * 产品支付
     *
     * @param payProductOrderUnifiedReqVO
     */
    PayOrderRespDTO productPay(PayProductOrderUnifiedReqVO payProductOrderUnifiedReqVO);

    /**
     * 获取购买产品的到期时间
     *
     * @param payProductOrderUnifiedReqVO
     * @return
     */
    String getProductPayExpireTime(PayProductOrderUnifiedReqVO payProductOrderUnifiedReqVO);

    /**
     * 查询支付订单支付状态
     * 未支付、超时等都抛出支付异常
     *
     * @param outTradeNo
     * @return
     */
    void queryPayOrderStatus(String outTradeNo, int channelCode);

    /**
     * 解析和处理支付回调数据
     *
     * @param params
     * @param body
     * @return
     */
    void doOrderNotify(Integer channelCode, Map<String, String> params, String body, Map<String, String> headers);

    /**
     * 处理过期订单
     *
     * @return
     */
    int expirePayOrder();

    /**
     * 管理端查询充值总额
     *
     * @return
     */
    BigDecimal getRechargeTotalAmount();

    /**
     * 创建支付订单
     *
     * @param payOrderDO
     */
    void createPayOrder(PayOrderDO payOrderDO);
}
