package cn.hztech.sdk.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;

import jakarta.validation.constraints.NotBlank;

/**
 * SDK配置属性类
 *
 * 配置项：
 * - appId: 应用ID
 * - privateKey: 应用SM2私钥
 * - platformPublicKey: 主系统SM2公钥
 * - gatewayUrl: 网关URL
 * - connectTimeout: 连接超时（毫秒）
 * - readTimeout: 读取超时（毫秒）
 * - writeTimeout: 写入超时（毫秒）
 * - enableLog: 是否启用日志
 * - enableRetry: 是否启用重试
 * - enableCache: 是否启用缓存
 * - timestampTolerance: 时间戳容差（毫秒）
 */
@Data
@Validated
@ConfigurationProperties(prefix = "hztech.platform.sdk")
public class SdkProperties {

    /**
     * 应用ID
     */
    @NotBlank(message = "应用ID不能为空")
    private String appId;

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

    /**
     * 主系统SM2公钥
     */
    @NotBlank(message = "主系统SM2公钥不能为空")
    private String platformPublicKey;

    /**
     * 网关基础URL
     */
    @NotBlank(message = "网关URL不能为空")
    private String gatewayUrl;

    /**
     * 连接超时时间（毫秒）
     */
    private Integer connectTimeout = 10000;

    /**
     * 读取超时时间（毫秒）
     */
    private Integer readTimeout = 30000;

    /**
     * 写入超时时间（毫秒）
     */
    private Integer writeTimeout = 30000;

    /**
     * 是否启用日志
     */
    private Boolean enableLog = true;

    /**
     * 日志级别
     */
    private String logLevel = "INFO";

    /**
     * 是否启用重试
     */
    private Boolean enableRetry = true;

    /**
     * 最大重试次数
     */
    private Integer maxRetries = 3;

    /**
     * 重试间隔（毫秒）
     */
    private Long retryInterval = 1000L;

    /**
     * 是否启用缓存
     */
    private Boolean enableCache = true;

    /**
     * 缓存最大数量
     */
    private Long cacheMaxSize = 1000L;

    /**
     * 缓存过期时间（秒）
     */
    private Long cacheExpireSeconds = 300L;

    /**
     * 时间戳容差（毫秒）
     */
    private Long timestampTolerance = 60000L;
}
