package com.app.config;

import com.github.wxpay.sdk.WXPayConfig;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.InputStream;

@Slf4j
@Data
@Component
public class WXMPPayConfig implements WXPayConfig {

    /**
     * 公众账号ID
     */
    @Value("${wx.pay.app-id}")
    private String appID;

    /**
     * 商户号
     */
    @Value("${wx.pay.mch-id}")
    private String mchID;

    /**
     * API 密钥
     * 微信支付 - 商户平台
     * https://pay.weixin.qq.com/index.php/core/cert/api_cert
     * <p>
     * 管理账号登录 -> 账户中心 -> API安全 -> API密钥
     */
    @Value("${wx.pay.key}")
    private String key;

    /**
     * API证书绝对路径
     * 不涉及高级接口不需要配置 API安全证书
     */
    @Value("${wx.pay.cert-path}")
    private String certPath;

    /**
     * 签名方式
     */
    @Value("${wx.pay.sign-type}")
    private String signType;

    /**
     * 交易类型
     */
    @Value("${wx.pay.trade-type}")
    private String tradeType;

    /**
     * 退款异步通知地址
     */
    @Value("${wx.pay.notify-url}")
    private String notifyUrl;

    /**
     * 是否使用沙箱模式
     */
    @Value("${wx.pay.use-sandbox}")
    private Boolean useSandbox;

    /**
     * API 沙箱环境密钥
     */
    @Value("${wx.pay.sandbox-key}")
    private String sandboxKey;

    /**
     * API 沙箱环境获取密钥URL
     */
    private String sandboxKeyUrl = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey";

    /**
     * HTTP(S) 连接超时时间，单位毫秒
     */
    private int httpConnectTimeoutMs = 120 * 1000;

    /**
     * HTTP(S) 读数据超时时间，单位毫秒
     */
    private int httpReadTimeoutMs = 120 * 1000;

    @Override
    public String getAppID() {
        return this.appID;
    }

    @Override
    public String getMchID() {
        return this.mchID;
    }

    @Override
    public String getKey() {
        if (this.useSandbox) {
            return this.sandboxKey;
        }
        return this.key;
    }

    @Override
    public InputStream getCertStream() {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12");
    }

    @Override
    public int getHttpConnectTimeoutMs() {
        return this.httpConnectTimeoutMs;
    }

    @Override
    public int getHttpReadTimeoutMs() {
        return this.httpReadTimeoutMs;
    }

}
