package com.njzscloud.common.http.config;

import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.time.Duration;

/**
 * HTTP 客户端配置
 */
@Getter
@Setter
@Accessors(chain = true)
@ConfigurationProperties("http-client")
public class HttpClientProperties {

    public static final HttpClientProperties DEFAULT = new HttpClientProperties();

    /**
     * 调用的超时
     * 覆盖解析 DNS、连接、写入请求正文、服务器处理和读取响应正文等。如果调用需要重定向或重试，所有都必须在一个超时期限内完成。
     * 默认 0，0 表示不限制
     */
    private Duration callTimeout = Duration.ofSeconds(0);

    /**
     * 读取超时
     * 默认 10s，0 表示不限制
     */
    private Duration readTimeout = Duration.ofSeconds(10);

    /**
     * 连接超时
     * TCP 套接字连接到目标主机超时时间
     * 默认 10s，0 表示不限制
     */
    private Duration connectTimeout = Duration.ofSeconds(10);

    /**
     * 最大活跃连接数, IP 和 port 相同的 HTTP 请求通常共享同一个连接
     * 默认 500
     */
    private int maxIdleConnections = 500;

    /**
     * 连接空闲时间
     * 默认 10min
     */
    private Duration keepAliveTime = Duration.ofMinutes(10);

    /**
     * 是否禁用 SSL 验证, 默认 false 不禁用
     */
    private boolean disableSslValidation = false;

    /**
     * 是否允许重定向, 默认 true 允许
     */
    private boolean followRedirects = true;
}
