package com.gzzm.lobster.tool.mcp;

import com.gzzm.lobster.common.McpTransportType;
import com.gzzm.lobster.common.ToolRiskLevel;
import net.cyan.thunwind.annotation.ColumnDescription;
import net.cyan.thunwind.annotation.Entity;
import net.cyan.thunwind.annotation.Index;

import java.util.Date;

/**
 * McpServerConfig —— MCP Server 连接配置 / MCP Server connection config.
 */
@Entity(table = "AI_MCP_SERVER_CONFIG", keys = "serverId")
public class McpServerConfig {

    @ColumnDescription(type = "varchar(60)")
    private String serverId;

    @ColumnDescription(type = "varchar(200)")
    private String displayName;

    private McpTransportType transportType;

    @ColumnDescription(type = "varchar(400)", nullable = false)
    private String endpoint;

    @ColumnDescription(type = "varchar(1000)")
    private String authToken;

    @ColumnDescription(type = "clob")
    private String headersJson;

    @ColumnDescription(type = "number(8)", defaultValue = "5000")
    private Integer connectTimeoutMs;

    @ColumnDescription(type = "number(8)", defaultValue = "30000")
    private Integer readTimeoutMs;

    @Index
    @ColumnDescription(type = "varchar(40)", nullable = false)
    private String namespace;

    private ToolRiskLevel defaultRisk;

    @ColumnDescription(type = "number(1)", defaultValue = "1")
    private Boolean enabled;

    @ColumnDescription(type = "varchar(40)")
    private String orgId;

    private Date createTime;
    private Date updateTime;

    public McpServerConfig() {}

    public String getServerId() { return serverId; }
    public void setServerId(String serverId) { this.serverId = serverId; }
    public String getDisplayName() { return displayName; }
    public void setDisplayName(String displayName) { this.displayName = displayName; }
    public McpTransportType getTransportType() { return transportType; }
    public void setTransportType(McpTransportType transportType) { this.transportType = transportType; }
    public String getEndpoint() { return endpoint; }
    public void setEndpoint(String endpoint) { this.endpoint = endpoint; }
    public String getAuthToken() { return authToken; }
    public void setAuthToken(String authToken) { this.authToken = authToken; }
    public String getHeadersJson() { return headersJson; }
    public void setHeadersJson(String headersJson) { this.headersJson = headersJson; }
    public Integer getConnectTimeoutMs() { return connectTimeoutMs; }
    public void setConnectTimeoutMs(Integer connectTimeoutMs) { this.connectTimeoutMs = connectTimeoutMs; }
    public Integer getReadTimeoutMs() { return readTimeoutMs; }
    public void setReadTimeoutMs(Integer readTimeoutMs) { this.readTimeoutMs = readTimeoutMs; }
    public String getNamespace() { return namespace; }
    public void setNamespace(String namespace) { this.namespace = namespace; }
    public ToolRiskLevel getDefaultRisk() { return defaultRisk; }
    public void setDefaultRisk(ToolRiskLevel defaultRisk) { this.defaultRisk = defaultRisk; }
    public Boolean getEnabled() { return enabled; }
    public void setEnabled(Boolean enabled) { this.enabled = enabled; }
    public String getOrgId() { return orgId; }
    public void setOrgId(String orgId) { this.orgId = orgId; }
    public Date getCreateTime() { return createTime; }
    public void setCreateTime(Date createTime) { this.createTime = createTime; }
    public Date getUpdateTime() { return updateTime; }
    public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
}
