-- -- =============================
-- -- 智能体管理和平台基础设施模块
-- -- 支持：智能体广场、API集成管理、智能体运维监控
-- -- =============================
-- CREATE SCHEMA IF NOT EXISTS agent;

-- -- 智能体定义表
-- DROP TABLE IF EXISTS agent.tb_agent CASCADE;
-- CREATE TABLE agent.tb_agent (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
--   agent_code         VARCHAR(100)  NOT NULL,               -- 智能体编码（唯一标识）
--   agent_name         VARCHAR(255)  NOT NULL,               -- 智能体名称
--   agent_type         VARCHAR(50)   NOT NULL,               -- 智能体类型：bidding-招投标/customer_service-客服/knowledge_assistant-知识助手/custom-自定义
--   display_name       VARCHAR(255)  NOT NULL,               -- 展示名称
--   description        TEXT,                                 -- 智能体描述
--   icon               VARCHAR(500),                         -- 图标URL
--   banner             VARCHAR(500),                         -- Banner图URL
--   version            VARCHAR(20)   DEFAULT '1.0.0',        -- 版本号
--   model_provider     VARCHAR(50),                          -- 模型提供商：openai/anthropic/baidu/aliyun/custom
--   model_name         VARCHAR(100),                         -- 模型名称
--   model_config       JSONB,                                -- 模型配置（温度、最大tokens等）
--   prompt_template    TEXT,                                 -- 提示词模板
--   system_prompt      TEXT,                                 -- 系统提示词
--   capabilities       TEXT[],                               -- 能力列表
--   access_level       VARCHAR(20)   DEFAULT 'private',      -- 访问级别：public-公开/private-私有/internal-内部
--   is_published       BOOLEAN       DEFAULT false,          -- 是否发布到智能体广场
--   usage_count        INTEGER       DEFAULT 0,              -- 使用次数
--   rating             DECIMAL(3,2)  DEFAULT 0,              -- 评分（0-5）
--   rating_count       INTEGER       DEFAULT 0,              -- 评分人数
--   tags               TEXT[],                               -- 标签数组
--   category           VARCHAR(100),                         -- 分类
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   owner_user_id      VARCHAR(50),                          -- 所有者用户ID
--   status             VARCHAR(20)   DEFAULT 'active',       -- 状态：active-激活/inactive-停用/under_maintenance-维护中
--   creator            VARCHAR(50)   DEFAULT NULL,           -- 创建者
--   updater            VARCHAR(50)   DEFAULT NULL,           -- 更新者
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
--   delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
--   deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
--   PRIMARY KEY (agent_id),
--   UNIQUE (optsn),
--   UNIQUE (agent_code)
-- );

-- CREATE INDEX idx_agent_type ON agent.tb_agent(agent_type) WHERE deleted = false;
-- CREATE INDEX idx_agent_published ON agent.tb_agent(is_published) WHERE deleted = false AND is_published = true;
-- CREATE INDEX idx_agent_category ON agent.tb_agent(category) WHERE deleted = false;

-- COMMENT ON TABLE agent.tb_agent IS '智能体定义表';
-- COMMENT ON COLUMN agent.tb_agent.agent_type IS '智能体类型：bidding/customer_service/knowledge_assistant/custom';

-- -- 智能体会话表
-- DROP TABLE IF EXISTS agent.tb_agent_session CASCADE;
-- CREATE TABLE agent.tb_agent_session (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   session_id         VARCHAR(50)   NOT NULL,               -- 会话ID
--   agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
--   user_id            VARCHAR(50)   NOT NULL,               -- 用户ID
--   session_type       VARCHAR(30)   DEFAULT 'chat',         -- 会话类型：chat-对话/task-任务/workflow-工作流
--   session_name       VARCHAR(255),                         -- 会话名称
--   context            JSONB,                                -- 会话上下文
--   session_status     VARCHAR(20)   DEFAULT 'active',       -- 会话状态：active-活跃/paused-暂停/ended-结束
--   start_time         TIMESTAMPTZ   DEFAULT now(),          -- 开始时间
--   end_time           TIMESTAMPTZ,                          -- 结束时间
--   message_count      INTEGER       DEFAULT 0,              -- 消息数量
--   token_usage        INTEGER       DEFAULT 0,              -- Token使用量
--   cost               DECIMAL(10,4) DEFAULT 0,              -- 成本
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   creator            VARCHAR(50)   DEFAULT NULL,           -- 创建者
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
--   deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
--   PRIMARY KEY (session_id),
--   UNIQUE (optsn),
--   FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );

-- CREATE INDEX idx_session_agent ON agent.tb_agent_session(agent_id) WHERE deleted = false;
-- CREATE INDEX idx_session_user ON agent.tb_agent_session(user_id) WHERE deleted = false;

-- COMMENT ON TABLE agent.tb_agent_session IS '智能体会话表';

-- -- 智能体消息表
-- DROP TABLE IF EXISTS agent.tb_agent_message CASCADE;
-- CREATE TABLE agent.tb_agent_message (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   message_id         VARCHAR(50)   NOT NULL,               -- 消息ID
--   session_id         VARCHAR(50)   NOT NULL,               -- 会话ID
--   agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
--   role               VARCHAR(20)   NOT NULL,               -- 角色：user-用户/assistant-助手/system-系统/function-函数
--   content            TEXT,                                 -- 消息内容
--   content_type       VARCHAR(30)   DEFAULT 'text',         -- 内容类型：text-文本/image-图片/file-文件/structured-结构化数据
--   function_call      JSONB,                                -- 函数调用（JSON格式）
--   function_response  JSONB,                                -- 函数响应
--   token_count        INTEGER,                              -- Token数量
--   model_name         VARCHAR(100),                         -- 使用的模型
--   kb_references      JSONB,                                -- 知识库引用（JSON数组）
--   metadata           JSONB,                                -- 消息元数据
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
--   PRIMARY KEY (message_id),
--   UNIQUE (optsn),
--   FOREIGN KEY (session_id) REFERENCES agent.tb_agent_session(session_id),
--   FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );

-- CREATE INDEX idx_msg_session ON agent.tb_agent_message(session_id, create_time) WHERE deleted = false;
-- CREATE INDEX idx_msg_agent ON agent.tb_agent_message(agent_id) WHERE deleted = false;

-- COMMENT ON TABLE agent.tb_agent_message IS '智能体消息表';

-- -- 智能体工具表
-- DROP TABLE IF EXISTS agent.tb_agent_tool CASCADE;
-- CREATE TABLE agent.tb_agent_tool (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   tool_id            VARCHAR(50)   NOT NULL,               -- 工具ID
--   tool_code          VARCHAR(100)  NOT NULL,               -- 工具编码
--   tool_name          VARCHAR(255)  NOT NULL,               -- 工具名称
--   tool_type          VARCHAR(50)   NOT NULL,               -- 工具类型：api-API调用/function-函数/plugin-插件/integration-集成
--   description        TEXT,                                 -- 工具描述
--   function_schema    JSONB,                                -- 函数Schema（OpenAI function calling格式）
--   api_endpoint       VARCHAR(500),                         -- API端点
--   api_method         VARCHAR(10),                          -- API方法：GET/POST/PUT/DELETE
--   api_headers        JSONB,                                -- API请求头
--   auth_type          VARCHAR(30),                          -- 认证类型：none/api_key/oauth2/bearer
--   auth_config        JSONB,                                -- 认证配置（加密存储）
--   request_template   TEXT,                                 -- 请求模板
--   response_template  TEXT,                                 -- 响应模板
--   timeout_seconds    INTEGER       DEFAULT 30,             -- 超时时间（秒）
--   retry_count        INTEGER       DEFAULT 3,              -- 重试次数
--   is_enabled         BOOLEAN       DEFAULT true,           -- 是否启用
--   usage_count        INTEGER       DEFAULT 0,              -- 使用次数
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   creator            VARCHAR(50)   DEFAULT NULL,           -- 创建者
--   updater            VARCHAR(50)   DEFAULT NULL,           -- 更新者
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
--   delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
--   deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
--   PRIMARY KEY (tool_id),
--   UNIQUE (optsn),
--   UNIQUE (tool_code)
-- );

-- CREATE INDEX idx_tool_type ON agent.tb_agent_tool(tool_type) WHERE deleted = false;

-- COMMENT ON TABLE agent.tb_agent_tool IS '智能体工具表';

-- -- API集成注册表
-- DROP TABLE IF EXISTS agent.tb_api_integration CASCADE;
-- CREATE TABLE agent.tb_api_integration (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   integration_id     VARCHAR(50)   NOT NULL,               -- 集成ID
--   integration_name   VARCHAR(255)  NOT NULL,               -- 集成名称
--   integration_type   VARCHAR(50)   NOT NULL,               -- 集成类型：rest_api/soap/graphql/webhook/mq
--   provider           VARCHAR(100),                         -- 提供商
--   base_url           VARCHAR(500),                         -- 基础URL
--   version            VARCHAR(20),                          -- API版本
--   auth_type          VARCHAR(30)   DEFAULT 'none',         -- 认证类型
--   auth_config        JSONB,                                -- 认证配置（加密存储）
--   endpoints          JSONB,                                -- 端点列表（JSON数组）
--   rate_limit         INTEGER,                              -- 速率限制（请求/秒）
--   timeout_seconds    INTEGER       DEFAULT 30,             -- 超时时间
--   retry_config       JSONB,                                -- 重试配置
--   health_check_url   VARCHAR(500),                         -- 健康检查URL
--   health_status      VARCHAR(20)   DEFAULT 'unknown',      -- 健康状态：healthy-健康/unhealthy-不健康/unknown-未知
--   last_health_check  TIMESTAMPTZ,                          -- 最后健康检查时间
--   documentation_url  VARCHAR(500),                         -- 文档URL
--   is_enabled         BOOLEAN       DEFAULT true,           -- 是否启用
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   creator            VARCHAR(50)   DEFAULT NULL,           -- 创建者
--   updater            VARCHAR(50)   DEFAULT NULL,           -- 更新者
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
--   delete_time        TIMESTAMPTZ   DEFAULT NULL,           -- 删除时间
--   deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
--   PRIMARY KEY (integration_id),
--   UNIQUE (optsn)
-- );

-- CREATE INDEX idx_integration_type ON agent.tb_api_integration(integration_type) WHERE deleted = false;
-- CREATE INDEX idx_integration_health ON agent.tb_api_integration(health_status) WHERE deleted = false;

-- COMMENT ON TABLE agent.tb_api_integration IS 'API集成注册表';

-- -- API调用日志表
-- DROP TABLE IF EXISTS agent.tb_api_call_log CASCADE;
-- CREATE TABLE agent.tb_api_call_log (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   log_id             VARCHAR(50)   NOT NULL,               -- 日志ID
--   integration_id     VARCHAR(50),                          -- 集成ID
--   tool_id            VARCHAR(50),                          -- 工具ID
--   agent_id           VARCHAR(50),                          -- 智能体ID
--   session_id         VARCHAR(50),                          -- 会话ID
--   user_id            VARCHAR(50),                          -- 用户ID
--   endpoint           VARCHAR(500)  NOT NULL,               -- 请求端点
--   method             VARCHAR(10)   NOT NULL,               -- 请求方法
--   request_headers    JSONB,                                -- 请求头
--   request_body       TEXT,                                 -- 请求体
--   response_status    INTEGER,                              -- 响应状态码
--   response_headers   JSONB,                                -- 响应头
--   response_body      TEXT,                                 -- 响应体
--   duration_ms        INTEGER,                              -- 请求耗时（毫秒）
--   is_success         BOOLEAN,                              -- 是否成功
--   error_message      TEXT,                                 -- 错误信息
--   retry_count        INTEGER       DEFAULT 0,              -- 重试次数
--   ip_address         VARCHAR(45),                          -- IP地址
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   PRIMARY KEY (log_id),
--   UNIQUE (optsn)
-- );

-- CREATE INDEX idx_api_log_integration ON agent.tb_api_call_log(integration_id, create_time DESC);
-- CREATE INDEX idx_api_log_agent ON agent.tb_api_call_log(agent_id, create_time DESC);
-- CREATE INDEX idx_api_log_status ON agent.tb_api_call_log(is_success, create_time DESC);

-- COMMENT ON TABLE agent.tb_api_call_log IS 'API调用日志表';

-- -- 智能体监控指标表
-- DROP TABLE IF EXISTS agent.tb_agent_metrics CASCADE;
-- CREATE TABLE agent.tb_agent_metrics (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   metric_id          VARCHAR(50)   NOT NULL,               -- 指标ID
--   agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
--   metric_date        DATE          NOT NULL,               -- 指标日期
--   metric_hour        INTEGER,                              -- 指标小时（0-23）
--   total_sessions     INTEGER       DEFAULT 0,              -- 总会话数
--   active_sessions    INTEGER       DEFAULT 0,              -- 活跃会话数
--   total_messages     INTEGER       DEFAULT 0,              -- 总消息数
--   total_tokens       BIGINT        DEFAULT 0,              -- 总Token数
--   total_cost         DECIMAL(10,4) DEFAULT 0,              -- 总成本
--   avg_response_time  INTEGER,                              -- 平均响应时间（毫秒）
--   success_rate       DECIMAL(5,4),                         -- 成功率
--   error_count        INTEGER       DEFAULT 0,              -- 错误次数
--   api_call_count     INTEGER       DEFAULT 0,              -- API调用次数
--   avg_rating         DECIMAL(3,2),                         -- 平均评分
--   rating_count       INTEGER       DEFAULT 0,              -- 评分数量
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   update_time        TIMESTAMPTZ   DEFAULT NULL,           -- 更新时间
--   PRIMARY KEY (metric_id),
--   UNIQUE (optsn),
--   UNIQUE (agent_id, metric_date, metric_hour),
--   FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );

-- CREATE INDEX idx_metrics_agent_date ON agent.tb_agent_metrics(agent_id, metric_date DESC);

-- COMMENT ON TABLE agent.tb_agent_metrics IS '智能体监控指标表';

-- -- 智能体异常日志表
-- DROP TABLE IF EXISTS agent.tb_agent_error_log CASCADE;
-- CREATE TABLE agent.tb_agent_error_log (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   log_id             VARCHAR(50)   NOT NULL,               -- 日志ID
--   agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
--   session_id         VARCHAR(50),                          -- 会话ID
--   error_type         VARCHAR(50)   NOT NULL,               -- 错误类型：model_error-模型错误/api_error-API错误/timeout-超时/rate_limit-限流/other-其他
--   error_code         VARCHAR(50),                          -- 错误代码
--   error_message      TEXT          NOT NULL,               -- 错误信息
--   stack_trace        TEXT,                                 -- 堆栈跟踪
--   request_context    JSONB,                                -- 请求上下文
--   severity           VARCHAR(20)   DEFAULT 'error',        -- 严重级别：critical-致命/error-错误/warning-警告
--   is_resolved        BOOLEAN       DEFAULT false,          -- 是否已解决
--   resolution_notes   TEXT,                                 -- 解决方案备注
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   resolve_time       TIMESTAMPTZ,                          -- 解决时间
--   PRIMARY KEY (log_id),
--   UNIQUE (optsn),
--   FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );

-- CREATE INDEX idx_error_agent ON agent.tb_agent_error_log(agent_id, create_time DESC);
-- CREATE INDEX idx_error_severity ON agent.tb_agent_error_log(severity) WHERE is_resolved = false;

-- COMMENT ON TABLE agent.tb_agent_error_log IS '智能体异常日志表';

-- -- 智能体评价表
-- DROP TABLE IF EXISTS agent.tb_agent_rating CASCADE;
-- CREATE TABLE agent.tb_agent_rating (
--   optsn              VARCHAR(50)   NOT NULL,               -- 流水号
--   rating_id          VARCHAR(50)   NOT NULL,               -- 评价ID
--   agent_id           VARCHAR(50)   NOT NULL,               -- 智能体ID
--   session_id         VARCHAR(50),                          -- 会话ID
--   user_id            VARCHAR(50)   NOT NULL,               -- 用户ID
--   rating             INTEGER       NOT NULL,               -- 评分（1-5星）
--   dimensions         JSONB,                                -- 分维度评分（准确性、速度、友好度等）
--   feedback           TEXT,                                 -- 评价反馈
--   tags               TEXT[],                               -- 标签
--   is_anonymous       BOOLEAN       DEFAULT false,          -- 是否匿名
--   dept_path          VARCHAR(255)  DEFAULT NULL,           -- 部门全路径
--   create_time        TIMESTAMPTZ   NOT NULL DEFAULT now(), -- 创建时间
--   deleted            BOOLEAN       NOT NULL DEFAULT false, -- 是否删除
--   PRIMARY KEY (rating_id),
--   UNIQUE (optsn),
--   FOREIGN KEY (agent_id) REFERENCES agent.tb_agent(agent_id)
-- );

-- CREATE INDEX idx_rating_agent ON agent.tb_agent_rating(agent_id) WHERE deleted = false;

-- COMMENT ON TABLE agent.tb_agent_rating IS '智能体评价表';
