package com.xunhong.erp.turbo.api.infra.dto.common;

import com.alibaba.cola.dto.DTO;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.xunhong.erp.turbo.api.infra.dto.enums.SettingKeyEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@JsonTypeName("WX_PAY_CONFIG")
@Schema(title = "微信支付配置")
@EqualsAndHashCode(callSuper = true)
public class WxPayConfigValue extends DTO implements SettingValue {

	/**
	 * 设置微信公众号或者小程序等的appid
	 * (V3商户模式需要)
	 */
	@Schema(title = "微信公众号或者小程序等的appid", requiredMode = Schema.RequiredMode.REQUIRED)
	private String appId;

	/**
	 * 微信支付商户号
	 * (V3商户模式需要)
	 */
	@Schema(title = "微信支付商户号", requiredMode = Schema.RequiredMode.REQUIRED)
	private String mchId;

	/**
	 * 微信支付商户密钥
	 */
	@Schema(title = "微信支付商户密钥", requiredMode = Schema.RequiredMode.REQUIRED)
	private String mchKey;

	/**
	 * apiclient_cert.p12文件的绝对路径，或者如果放在项目中，请以classpath:开头指定
	 */
	@Schema(title = "apiclient_cert.p12文件的绝对路径", requiredMode = Schema.RequiredMode.REQUIRED)
	private String keyPath;

	/**
	 * apiV3 秘钥值
	 * (V3商户模式需要)
	 */
	@Schema(title = "apiV3 秘钥值", requiredMode = Schema.RequiredMode.REQUIRED)
	private String apiV3Key;

	/**
	 * apiV3 证书序列号值
	 * (V3商户模式需要)
	 */
	@Schema(title = "apiV3 证书序列号值", requiredMode = Schema.RequiredMode.REQUIRED)
	private String certSerialNo;

	/**
	 * apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径.
	 * (V3商户模式需要，这里用的是文件路径，可以用其它base64编码或字节数组参数替代)
	 */
	@Schema(title = "apiclient_cert.pem证书文件", requiredMode = Schema.RequiredMode.REQUIRED)
	private String privateCertString;

	/**
	 * apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径.
	 * (V3商户模式需要，这里用的是文件路径，可以用其它base64编码或字节数组参数替代)
	 */
	@Schema(title = "apiclient_key.pem证书文件", requiredMode = Schema.RequiredMode.REQUIRED)
	private String privateKeyString;

	/**
	 * 微信支付公钥，pub_key.pem证书文件的绝对路径或者以classpath:开头的类路径.
	 * (V3商户模式需要，这里用的是文件路径，可以用其它base64编码或字节数组参数替代，2024.08后的新商户验签需要用此公钥)
	 */
	@Schema(title = "微信支付公钥，pub_key.pem证书文件", requiredMode = Schema.RequiredMode.REQUIRED)
	private String publicKeyString;

	/**
	 * 微信支付公钥ID
	 * (V3商户模式需要，2024.08后的新商户验签需要用此公钥ID)
	 */
	@Schema(title = "微信支付公钥ID", requiredMode = Schema.RequiredMode.REQUIRED)
	private String publicKeyId;

	@Schema(title = "微信支付回调地址", requiredMode = Schema.RequiredMode.REQUIRED)
	private String notifyUrl;

	@Override
	public SettingKeyEnum getSettingKey() {
		return SettingKeyEnum.WX_PAY_CONFIG;
	}
}
