package com.czg.service;

import com.czg.entity.notify.CzgPayNotifyDTO;
import com.czg.entity.notify.CzgRefundNotifyDTO;
import com.czg.entity.req.*;
import com.czg.entity.resp.*;
import com.czg.resp.CzgResult;
import lombok.NonNull;

/**
 * @author ww
 * @description
 */
public interface CzgPayService {
    /**
     * h5支付
     *
     * @param appId     应用id tb_shop_merchant 表中的 app_id
     * @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
     */
    CzgResult<CzgH5PayResp> h5Pay(@NonNull String appId, @NonNull String appSecret, CzgH5PayReq bizData);

    /**
     * js支付
     *
     * @param appId     应用id tb_shop_merchant 表中的 app_id
     * @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
     */
    CzgResult<CzgJsPayResp> jsPay(@NonNull String appId, @NonNull String appSecret, CzgJsPayReq bizData);

    /**
     * 小程序支付
     *
     * @param appId     应用id tb_shop_merchant 表中的 app_id
     * @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
     */
    CzgResult<CzgLtPayResp> ltPay(@NonNull String appId, @NonNull String appSecret, CzgLtPayReq bizData);

    /**
     * PC扫码支付
     *
     * @param appId     应用id tb_shop_merchant 表中的 app_id
     * @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
     */
    CzgResult<CzgScanPayResp> scanPay(@NonNull String appId, @NonNull String appSecret, CzgScanPayReq bizData);

    /**
     * 聚合反扫
     *
     * @param appId     应用id tb_shop_merchant 表中的 app_id
     * @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
     */
    CzgResult<CzgMicroPayResp> microPay(@NonNull String appId, @NonNull String appSecret, CzgMicroPayReq bizData);

    /**
     * 订单查询
     *
     * @param appId      应用id tb_shop_merchant 表中的 app_id
     * @param appSecret  应用密钥 tb_shop_merchant 表中的 app_secret
     * @param payOrderId 平台订单号
     * @param mchOrderNo 商户订单号
     */
    CzgResult<CzgBaseResp> queryPayOrder(@NonNull String appId, @NonNull String appSecret,
                                         String payOrderId, String mchOrderNo);


    /**
     * 订单退款
     *
     * @param appId     应用id tb_shop_merchant 表中的 app_id
     * @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
     */
    CzgResult<CzgRefundResp> refundOrder(@NonNull String appId, @NonNull String appSecret, CzgRefundReq bizData);

    /**
     * 退款订单查询
     *
     * @param appId         应用id tb_shop_merchant 表中的 app_id
     * @param appSecret     应用密钥 tb_shop_merchant 表中的 app_secret
     * @param mchRefundNo   商户退款订单号 二选一
     * @param refundOrderId 平台退款订单号 二选一
     */
    CzgResult<CzgRefundResp> queryRefundOrder(@NonNull String appId, @NonNull String appSecret,
                                              String mchRefundNo, String refundOrderId);


}
