package com.gzzm.lobster.config;

import net.cyan.thunwind.annotation.ColumnDescription;
import net.cyan.thunwind.annotation.Entity;
import net.cyan.thunwind.annotation.Index;

import java.util.Date;

/**
 * AgentProfile —— Agent 配置 / Agent profile (DB-managed).
 *
 * <p>首期单 Agent 架构。此对象用于支持未来 multi-agent 扩展，
 * 同时存放默认模型、默认 skill 集合、默认工具开关等。
 * Single-agent architecture in phase-1; this profile lays the ground
 * for future multi-agent while holding default model/skills/tools.
 */
@Entity(table = "AI_AGENT_PROFILE", keys = "agentId")
public class AgentProfile {

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

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

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

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

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

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

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

    /** 默认启用的 tools（逗号分隔，为空表示全部启用）*/
    @ColumnDescription(type = "varchar(2000)")
    private String enabledTools;

    /** 默认启用的 skills（逗号分隔）*/
    @ColumnDescription(type = "varchar(2000)")
    private String enabledSkills;

    @ColumnDescription(type = "number(6)", defaultValue = "20")
    private Integer maxTurnsPerRun;

    @ColumnDescription(type = "number(6)", defaultValue = "30")
    private Integer maxToolCallsPerRun;

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

    private Date createTime;
    private Date updateTime;

    public AgentProfile() {}

    public String getAgentId() { return agentId; }
    public void setAgentId(String agentId) { this.agentId = agentId; }
    public String getDisplayName() { return displayName; }
    public void setDisplayName(String displayName) { this.displayName = displayName; }
    public String getOrgId() { return orgId; }
    public void setOrgId(String orgId) { this.orgId = orgId; }
    public String getDefaultModelId() { return defaultModelId; }
    public void setDefaultModelId(String defaultModelId) { this.defaultModelId = defaultModelId; }
    public String getFastModelId() { return fastModelId; }
    public void setFastModelId(String fastModelId) { this.fastModelId = fastModelId; }
    public String getPremiumModelId() { return premiumModelId; }
    public void setPremiumModelId(String premiumModelId) { this.premiumModelId = premiumModelId; }
    public String getFallbackModelId() { return fallbackModelId; }
    public void setFallbackModelId(String fallbackModelId) { this.fallbackModelId = fallbackModelId; }
    public String getEnabledTools() { return enabledTools; }
    public void setEnabledTools(String enabledTools) { this.enabledTools = enabledTools; }
    public String getEnabledSkills() { return enabledSkills; }
    public void setEnabledSkills(String enabledSkills) { this.enabledSkills = enabledSkills; }
    public Integer getMaxTurnsPerRun() { return maxTurnsPerRun; }
    public void setMaxTurnsPerRun(Integer maxTurnsPerRun) { this.maxTurnsPerRun = maxTurnsPerRun; }
    public Integer getMaxToolCallsPerRun() { return maxToolCallsPerRun; }
    public void setMaxToolCallsPerRun(Integer maxToolCallsPerRun) { this.maxToolCallsPerRun = maxToolCallsPerRun; }
    public Boolean getEnabled() { return enabled; }
    public void setEnabled(Boolean enabled) { this.enabled = enabled; }
    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; }
}
