package com.czg;

import com.czg.enums.CzgPayEnum;
import com.czg.pay.*;
import com.czg.resp.CzgResult;
import jakarta.validation.constraints.NotBlank;
import lombok.NonNull;

import java.util.Map;

/**
 * 支付适配器接口
 *
 * @author ww
 *
 */
public interface PayAdapter {

    /**
     * 支付渠道
     * {@link com.czg.constant.PayChannelCst}
     */
    String getChannel();

    /**
     * 统一支付接口
     *
     * @param payType   支付类型
     * @param payData   支付数据  Json类型
     *                  对应 聚合支付参数 {@link PolyMerchantDTO}
     *                  对应 原生支付参数 {@link NativeMerchantDTO}
     * @param domain    域名      请求地址
     * @param notifyUrl 通知地址
     * @param bizData   业务数据
     */
    CzgResult<Map<String, Object>> pay(@NonNull CzgPayEnum payType, @NotBlank String payData, @NotBlank String domain,
                                       @NotBlank String notifyUrl, CzgPayBaseReq bizData);

    CzgResult<RefundRespDTO> refund(@NotBlank String domain, @NotBlank String payData, CzgRefundReq bizData);

    CzgResult<QueryOrderRespDTO> queryPayOrder(@NotBlank String domain, @NotBlank String payData, String payOrderId, String mchOrderNo, String platform);

    CzgResult<RefundRespDTO> queryRefund(@NotBlank String domain, @NotBlank String payData, String mchRefundNo, String refundOrderId);

}
