package cn.nianxx.thhotel.integrations.messaging.agentbus.adapter;

import java.time.Duration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * AgentBus 入站连接配置。Secret 只从环境变量注入，不在响应、日志或测试夹具中输出。
 */
@Component
@ConfigurationProperties(prefix = "agentbus")
public class AgentBusProperties {

    /** AgentBus 探针和长连接开关，默认关闭。 */
    private Probe probe = new Probe();
    /** AgentBus WebSocket 连接参数。 */
    private Ws ws = new Ws();
    /** AgentBus 入站捕获配置。 */
    private Capture capture = new Capture();
    /** 单个入站 frame 最大字节数，超过后拒绝处理。 */
    private int maxFrameBytes = 1048576;

    public Probe getProbe() {
        return probe;
    }

    public void setProbe(Probe probe) {
        this.probe = probe;
    }

    public Ws getWs() {
        return ws;
    }

    public void setWs(Ws ws) {
        this.ws = ws;
    }

    public Capture getCapture() {
        return capture;
    }

    public void setCapture(Capture capture) {
        this.capture = capture;
    }

    public int getMaxFrameBytes() {
        return maxFrameBytes;
    }

    public void setMaxFrameBytes(int maxFrameBytes) {
        this.maxFrameBytes = maxFrameBytes;
    }

    /**
     * AgentBus WebSocket 启停配置。
     */
    public static class Probe {

        /** 是否启用 AgentBus WebSocket 长连接。 */
        private boolean enabled = false;

        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }
    }

    /**
     * AgentBus WebSocket 连接参数。
     */
    public static class Ws {

        /** AgentBus WebSocket 地址。 */
        private String url = "wss://mesh.nianxx.cn/ws";
        /** AgentBus WebSocket 鉴权 Token。 */
        private String token;
        /** AgentBus 断线重连等待时间。 */
        private Duration reconnectDelay = Duration.ofSeconds(5);
        /** AgentBus 连接超时时间。 */
        private Duration connectTimeout = Duration.ofSeconds(15);

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public String getToken() {
            return token;
        }

        public void setToken(String token) {
            this.token = token;
        }

        public Duration getReconnectDelay() {
            return reconnectDelay;
        }

        public void setReconnectDelay(Duration reconnectDelay) {
            this.reconnectDelay = reconnectDelay;
        }

        public Duration getConnectTimeout() {
            return connectTimeout;
        }

        public void setConnectTimeout(Duration connectTimeout) {
            this.connectTimeout = connectTimeout;
        }
    }

    /**
     * AgentBus 入站消息捕获配置。
     */
    public static class Capture {

        /** 是否把业务 frame 写入 SourceMessage Inbox。 */
        private boolean enabled = true;

        public boolean isEnabled() {
            return enabled;
        }

        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }
    }
}
