package org.dromara.pay.config;

import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

/**
 * 支付配置属性
 *
 * @author pengles
 */
@Data
@Component
@Validated
@ConfigurationProperties(prefix = "pay")
public class PayProperties {

    /**
     * 支付宝配置
     */
    @Valid
    private AlipayProperties alipay = new AlipayProperties();

    /**
     * 微信支付配置
     */
    @Valid
    private WechatProperties wechat = new WechatProperties();

    @Data
    public static class AlipayProperties {
        /**
         * 应用ID
         */
        @NotBlank(message = "支付宝AppId不能为空")
        private String appId;

        /**
         * 商户号
         */
        @NotBlank(message = "支付宝商户号不能为空")
        private String mchId;

        /**
         * 支付宝网关地址
         */
        @NotBlank(message = "支付宝网关地址不能为空")
        private String serverUrl;

        /**
         * 支付宝公钥
         */
        @NotBlank(message = "支付宝公钥不能为空")
        private String alipayPublicKey;

        /**
         * 应用私钥
         */
        @NotBlank(message = "应用私钥不能为空")
        private String privateKey;

        /**
         * 异步通知地址
         */
        @NotBlank(message = "支付宝异步通知地址不能为空")
        private String notifyUrl;

        /**
         * 同步跳转地址
         */
        @NotBlank(message = "支付宝同步跳转地址不能为空")
        private String returnUrl;

        /**
         * 签名类型
         */
        private String signType = "RSA2";

        /**
         * 字符编码
         */
        private String charset = "UTF-8";
    }

    @Data
    public static class WechatProperties {
        /**
         * 公众号AppId 1
         */
        @NotBlank(message = "微信公众号AppId不能为空")
        private String appMp1Id;

        /**
         * 公众号AppId 2
         */
        private String appMp2Id;

        /**
         * 商户号
         */
        @NotBlank(message = "微信商户号不能为空")
        private String mchId;

        /**
         * 商户证书序列号
         */
        @NotBlank(message = "微信商户证书序列号不能为空")
        private String mchSerialNo;

        /**
         * 商户API私钥
         */
        @NotBlank(message = "微信商户API私钥不能为空")
        private String privateKey;

        /**
         * API V3 密钥
         */
        @NotBlank(message = "微信API V3密钥不能为空")
        private String apiV3Key;
        
        /**
         * 异步通知地址
         */
        @NotBlank(message = "微信异步通知地址不能为空")
        private String notifyUrl;
    }
}
