package com.gzzm.lobster.tool.mcp;

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;

/**
 * MCP 工具发现缓存。
 */
@Entity(table = "AI_MCP_TOOL_CACHE", keys = "toolKey")
public class McpToolCache {

    @ColumnDescription(type = "varchar(320)")
    private String toolKey;

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

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

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

    @ColumnDescription(type = "varchar(160)")
    private String remoteToolName;

    @Index
    @ColumnDescription(type = "varchar(220)")
    private String localToolName;

    private McpToolExposureMode exposureMode;

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

    @ColumnDescription(type = "varchar(4000)")
    private String description;

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

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

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

    private ToolRiskLevel riskLevel;

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

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

    @ColumnDescription(type = "varchar(80)")
    private String schemaHash;

    private Date lastDiscoveredAt;

    private Date lastCallAt;

    @ColumnDescription(type = "varchar(80)")
    private String lastErrorCode;

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

    private Date createTime;
    private Date updateTime;

    public String getToolKey() { return toolKey; }
    public void setToolKey(String toolKey) { this.toolKey = toolKey; }
    public String getServerId() { return serverId; }
    public void setServerId(String serverId) { this.serverId = serverId; }
    public String getNamespace() { return namespace; }
    public void setNamespace(String namespace) { this.namespace = namespace; }
    public String getOrgId() { return orgId; }
    public void setOrgId(String orgId) { this.orgId = orgId; }
    public String getRemoteToolName() { return remoteToolName; }
    public void setRemoteToolName(String remoteToolName) { this.remoteToolName = remoteToolName; }
    public String getLocalToolName() { return localToolName; }
    public void setLocalToolName(String localToolName) { this.localToolName = localToolName; }
    public McpToolExposureMode getExposureMode() { return exposureMode == null ? McpToolExposureMode.DIRECT : exposureMode; }
    public void setExposureMode(McpToolExposureMode exposureMode) { this.exposureMode = exposureMode; }
    public String getDisplayName() { return displayName; }
    public void setDisplayName(String displayName) { this.displayName = displayName; }
    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }
    public String getInputSchemaJson() { return inputSchemaJson; }
    public void setInputSchemaJson(String inputSchemaJson) { this.inputSchemaJson = inputSchemaJson; }
    public String getOutputSchemaJson() { return outputSchemaJson; }
    public void setOutputSchemaJson(String outputSchemaJson) { this.outputSchemaJson = outputSchemaJson; }
    public String getAnnotationsJson() { return annotationsJson; }
    public void setAnnotationsJson(String annotationsJson) { this.annotationsJson = annotationsJson; }
    public ToolRiskLevel getRiskLevel() { return riskLevel; }
    public void setRiskLevel(ToolRiskLevel riskLevel) { this.riskLevel = riskLevel; }
    public Boolean getRequireConfirm() { return requireConfirm; }
    public void setRequireConfirm(Boolean requireConfirm) { this.requireConfirm = requireConfirm; }
    public Boolean getEnabled() { return enabled; }
    public void setEnabled(Boolean enabled) { this.enabled = enabled; }
    public String getSchemaHash() { return schemaHash; }
    public void setSchemaHash(String schemaHash) { this.schemaHash = schemaHash; }
    public Date getLastDiscoveredAt() { return lastDiscoveredAt; }
    public void setLastDiscoveredAt(Date lastDiscoveredAt) { this.lastDiscoveredAt = lastDiscoveredAt; }
    public Date getLastCallAt() { return lastCallAt; }
    public void setLastCallAt(Date lastCallAt) { this.lastCallAt = lastCallAt; }
    public String getLastErrorCode() { return lastErrorCode; }
    public void setLastErrorCode(String lastErrorCode) { this.lastErrorCode = lastErrorCode; }
    public String getLastErrorMessage() { return lastErrorMessage; }
    public void setLastErrorMessage(String lastErrorMessage) { this.lastErrorMessage = lastErrorMessage; }
    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; }
}
