package com.qdb.sdk;

import lombok.Builder;
import lombok.Data;

/**
 * 企得宝ERP SDK 配置类
 * <p>
 * 包含API访问所需的认证信息、请求地址及超时配置。
 * 通过 {@link QdbConfigBuilder} 构建配置实例。
 * </p>
 *
 * @author qdb-sdk
 * @version 1.0.0
 */
@Data
@Builder
public class QdbConfig {

    /**
     * API请求地址
     * <ul>
     *   <li>正式环境：{@code https://api.7debao.com/router/api}</li>
     *   <li>测试环境：{@code https://apitest.7debao.com/router/api}</li>
     * </ul>
     */
    @Builder.Default
    private String apiUrl = "https://api.7debao.com/router/api";

    /**
     * 分配给应用的 clientId（必填）
     */
    private String clientId;

    /**
     * 分配给应用的 clientSecret（必填）
     */
    private String clientSecret;

    /**
     * HTTP 连接超时时间（秒），默认 10
     */
    @Builder.Default
    private int connectTimeout = 10;

    /**
     * HTTP 读取超时时间（秒），默认 30
     */
    @Builder.Default
    private int readTimeout = 30;

    /**
     * HTTP 写入超时时间（秒），默认 30
     */
    @Builder.Default
    private int writeTimeout = 30;

    /**
     * 响应格式，默认 json
     */
    @Builder.Default
    private String format = "json";

    /**
     * API 版本，默认 1.0
     */
    @Builder.Default
    private String version = "1.0";

    /**
     * 合作伙伴标识，默认 qdb-sdk-java-httpdns-20241113
     */
    @Builder.Default
    private String partnerId = "qdb-sdk-java-httpdns-20241113";

    /**
     * 校验配置信息是否完整
     *
     * @throws IllegalArgumentException 配置信息不完整时抛出
     */
    public void validate() {
        if (clientId == null || clientId.trim().isEmpty()) {
            throw new IllegalArgumentException("clientId 不能为空");
        }
        if (clientSecret == null || clientSecret.trim().isEmpty()) {
            throw new IllegalArgumentException("clientSecret 不能为空");
        }
        if (apiUrl == null || apiUrl.trim().isEmpty()) {
            throw new IllegalArgumentException("apiUrl 不能为空");
        }
    }
}
