package com.hzs.third.pay.service;

import com.hzs.common.core.enums.EPayChannel;
import com.hzs.common.domain.third.pay.TOnlinePayment;
import com.hzs.third.pay.dto.RefundDTO;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 基础退款服务
 */
public interface IRefundService {

    /**
     * 通联退款处理
     *
     * @param refundDTO      业务类型
     * @param tOnlinePayment 退款对应支付信息
     * @return
     */
    String allInRefundHandle(RefundDTO refundDTO, TOnlinePayment tOnlinePayment);

    /**
     * 退款回调成功处理
     *
     * @param ePayChannel  退款渠道
     * @param refundCode   退款编号
     * @param refundNumber 退款流水号
     * @param finishTime   退款完成时间
     * @param finishMoney  退款完成金额
     * @return
     */
    boolean notifyHandle(EPayChannel ePayChannel, String refundCode, String refundNumber, Date finishTime, BigDecimal finishMoney);

    /**
     * 退款回调失败处理
     *
     * @param ePayChannel  退款渠道
     * @param refundCode   退款编号
     * @param refundNumber 退款流水号
     * @param errorMsg     退款失败原因
     * @return
     */
    boolean notifyErrorHandle(EPayChannel ePayChannel, String refundCode, String refundNumber, String errorMsg);


    /**
     * 京东退款处理
     *
     * @param refundDTO      业务类型
     * @param tOnlinePayment 退款对应支付信息
     * @return
     */
    String jdRefundHandle(RefundDTO refundDTO, TOnlinePayment tOnlinePayment);

    /**
     * 京东收银台退款处理
     *
     * @param refundDTO      业务类型
     * @param tOnlinePayment 退款对应支付信息
     * @return
     */
    String jdCashRefundHandle(RefundDTO refundDTO, TOnlinePayment tOnlinePayment);

    String jdRefundDivision(String orderCode, Long userId);
    String jdQueryEnterpriseWalletBalance();
}
