-- =========================================
-- AI助手模块 (ai.sql)
-- 功能：AI对话、多模型支持
-- 设计：服务注册表模式，新增AI只需插入一行数据
-- =========================================

-- ----------------------------
-- 1. AI服务表（合并 厂商+模型+配置）
-- ----------------------------
DROP TABLE IF EXISTS ai_service;
CREATE TABLE ai_service (
  service_id      BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '服务ID',
  service_name    VARCHAR(100)  NOT NULL                 COMMENT '服务名称（显示用）',
  service_code    VARCHAR(50)   NOT NULL                 COMMENT '服务代码（唯一标识）',
  
  -- 厂商信息（内嵌，无需单独表）
  provider        VARCHAR(50)   NOT NULL                 COMMENT '厂商标识: openai/zhipu/alibaba/baidu/moonshot/ollama',
  provider_name   VARCHAR(50)   DEFAULT NULL             COMMENT '厂商名称',
  
  -- 模型信息（内嵌，无需单独表）
  model_code      VARCHAR(100)  NOT NULL                 COMMENT '模型代码: gpt-4/glm-4/qwen-max',
  
  -- API配置
  api_url         VARCHAR(500)  NOT NULL                 COMMENT 'API地址',
  api_key         VARCHAR(500)  DEFAULT NULL             COMMENT 'API密钥（加密存储）',
  api_secret      VARCHAR(500)  DEFAULT NULL             COMMENT 'API Secret（部分厂商需要）',
  
  -- 模型参数（带默认值）
  temperature     DECIMAL(3,2)  DEFAULT 0.70             COMMENT '温度参数(0-2)',
  top_p           DECIMAL(3,2)  DEFAULT 0.95             COMMENT 'Top P参数(0-1)',
  max_tokens      INT(11)       DEFAULT 4096             COMMENT '最大Token数',
  system_prompt   TEXT          DEFAULT NULL             COMMENT '系统提示词',
  
  -- 高级配置
  context_window  INT(11)       DEFAULT 8192             COMMENT '上下文窗口大小',
  supports_stream CHAR(1)       DEFAULT '1'              COMMENT '支持流式: 0=否 1=是',
  supports_vision   CHAR(1)       DEFAULT '0'              COMMENT '支持视觉: 0=否 1=是',
  supports_tools    CHAR(1)       DEFAULT '0'              COMMENT '支持工具调用: 0=否 1=是',
  supports_thinking CHAR(1)       DEFAULT '0'              COMMENT '支持深度思考: 0=否 1=是',
  supports_search   CHAR(1)       DEFAULT '0'              COMMENT '支持联网搜索: 0=否 1=是',
  supports_files    CHAR(1)       DEFAULT '0'              COMMENT '支持文件解析: 0=否 1=是',
  extra_params      JSON          DEFAULT NULL             COMMENT '额外参数(JSON格式)',
  
  -- 状态控制
  enabled         CHAR(1)       DEFAULT '1'              COMMENT '是否启用: 0=否 1=是',
  is_default      CHAR(1)       DEFAULT '0'              COMMENT '是否默认: 0=否 1=是',
  sort_order      INT(4)        DEFAULT 0                COMMENT '排序',
  
  -- 使用限制
  rate_limit      INT(11)       DEFAULT 60               COMMENT '速率限制(次/分钟)',
  daily_limit     INT(11)       DEFAULT 1000             COMMENT '每日限制(次)',
  
  -- 基础字段
  remark          VARCHAR(500)  DEFAULT NULL             COMMENT '备注',
  create_by       VARCHAR(64)   DEFAULT ''               COMMENT '创建者',
  create_time     DATETIME      DEFAULT NULL             COMMENT '创建时间',
  update_by       VARCHAR(64)   DEFAULT ''               COMMENT '更新者',
  update_time     DATETIME      DEFAULT NULL             COMMENT '更新时间',
  
  PRIMARY KEY (service_id),
  UNIQUE KEY uk_service_code (service_code),
  KEY idx_provider (provider),
  KEY idx_enabled (enabled)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI服务表';

-- ----------------------------
-- 2. AI对话会话表（简化版）
-- ----------------------------
DROP TABLE IF EXISTS ai_conversation;
CREATE TABLE ai_conversation (
  conversation_id   BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '会话ID',
  user_id           BIGINT(20)    NOT NULL                 COMMENT '用户ID',
  service_id        BIGINT(20)    NOT NULL                 COMMENT 'AI服务ID',
  title             VARCHAR(200)  DEFAULT '新对话'          COMMENT '会话标题',
  system_prompt     TEXT          DEFAULT NULL             COMMENT '自定义系统提示词',
  message_count     INT(11)       DEFAULT 0                COMMENT '消息数量',
  total_tokens      INT(11)       DEFAULT 0                COMMENT '总Token数',
  last_message_time DATETIME      DEFAULT NULL             COMMENT '最后消息时间',
  is_pinned         CHAR(1)       DEFAULT '0'              COMMENT '是否置顶',
  status            CHAR(1)       DEFAULT '0'              COMMENT '状态: 0=正常 1=归档 2=删除',
  create_time       DATETIME      DEFAULT NULL             COMMENT '创建时间',
  update_time       DATETIME      DEFAULT NULL             COMMENT '更新时间',
  
  PRIMARY KEY (conversation_id),
  KEY idx_user_id (user_id),
  KEY idx_service_id (service_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI对话会话表';

-- ----------------------------
-- 3. AI对话消息表（保持不变）
-- ----------------------------
DROP TABLE IF EXISTS ai_message;
CREATE TABLE ai_message (
  message_id        BIGINT(20)    NOT NULL AUTO_INCREMENT  COMMENT '消息ID',
  conversation_id   BIGINT(20)    NOT NULL                 COMMENT '会话ID',
  role              VARCHAR(20)   NOT NULL                 COMMENT '角色: user/assistant/system',
  content           LONGTEXT      NOT NULL                 COMMENT '消息内容',
  reasoning         TEXT          DEFAULT NULL             COMMENT '思考过程',
  tokens            INT(11)       DEFAULT 0                COMMENT 'Token数量',
  response_time     INT(11)       DEFAULT NULL             COMMENT '响应时间(ms)',
  is_error          CHAR(1)       DEFAULT '0'              COMMENT '是否错误',
  create_time       DATETIME      DEFAULT NULL             COMMENT '创建时间',
  
  PRIMARY KEY (message_id),
  KEY idx_conversation_id (conversation_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='AI对话消息表';

-- =========================================
-- 预置AI服务数据（开箱即用）
-- 只需填入API Key即可使用
-- =========================================
INSERT INTO ai_service (service_name, service_code, provider, provider_name, model_code, api_url, temperature, max_tokens, context_window, supports_stream, supports_vision, remark, create_time) VALUES

-- OpenAI 系列
('GPT-4o',        'openai-gpt4o',      'openai',   'OpenAI',    'gpt-4o',           'https://api.openai.com/v1/chat/completions',           0.7, 4096, 128000, '1', '1', 'OpenAI最新多模态模型', NOW()),
('GPT-4o Mini',   'openai-gpt4o-mini', 'openai',   'OpenAI',    'gpt-4o-mini',      'https://api.openai.com/v1/chat/completions',           0.7, 4096, 128000, '1', '1', 'GPT-4o轻量版', NOW()),
('GPT-3.5 Turbo', 'openai-gpt35',      'openai',   'OpenAI',    'gpt-3.5-turbo',    'https://api.openai.com/v1/chat/completions',           0.7, 4096, 16385,  '1', '0', '经济实惠的选择', NOW()),

-- 智谱AI 系列
('GLM-4',         'zhipu-glm4',        'zhipu',    '智谱AI',    'glm-4',            'https://open.bigmodel.cn/api/paas/v4/chat/completions', 0.7, 4096, 128000, '1', '0', '智谱AI旗舰模型', NOW()),
('GLM-4-Flash',   'zhipu-glm4-flash',  'zhipu',    '智谱AI',    'glm-4-flash',      'https://open.bigmodel.cn/api/paas/v4/chat/completions', 0.7, 4096, 128000, '1', '0', '快速响应版本', NOW()),
('GLM-4V',        'zhipu-glm4v',       'zhipu',    '智谱AI',    'glm-4v',           'https://open.bigmodel.cn/api/paas/v4/chat/completions', 0.7, 4096, 128000, '1', '1', '视觉理解模型', NOW()),

-- 阿里云通义千问
('通义千问-Max',   'alibaba-qwen-max',  'alibaba',  '阿里云',    'qwen-max',         'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', 0.7, 4096, 32000, '1', '0', '通义千问旗舰版', NOW()),
('通义千问-Plus',  'alibaba-qwen-plus', 'alibaba',  '阿里云',    'qwen-plus',        'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', 0.7, 4096, 32000, '1', '0', '通义千问增强版', NOW()),
('通义千问-Turbo', 'alibaba-qwen-turbo','alibaba',  '阿里云',    'qwen-turbo',       'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', 0.7, 4096, 8000,  '1', '0', '通义千问快速版', NOW()),

-- 月之暗面 Kimi
('Kimi 128K',     'moonshot-128k',     'moonshot', '月之暗面',   'moonshot-v1-128k', 'https://api.moonshot.cn/v1/chat/completions',          0.7, 4096, 128000, '1', '0', '超长上下文模型', NOW()),
('Kimi 32K',      'moonshot-32k',      'moonshot', '月之暗面',   'moonshot-v1-32k',  'https://api.moonshot.cn/v1/chat/completions',          0.7, 4096, 32000,  '1', '0', '长上下文模型', NOW()),
('Kimi 8K',       'moonshot-8k',       'moonshot', '月之暗面',   'moonshot-v1-8k',   'https://api.moonshot.cn/v1/chat/completions',          0.7, 4096, 8000,   '1', '0', '标准模型', NOW()),

-- 百度文心一言
('文心一言 4.0',   'baidu-ernie4',      'baidu',    '百度',      'ernie-4.0-8k',     'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro', 0.7, 4096, 8000, '1', '0', '文心一言旗舰版', NOW()),
('文心一言 3.5',   'baidu-ernie35',     'baidu',    '百度',      'ernie-3.5-8k',     'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant',       0.7, 4096, 8000, '1', '0', '文心一言标准版', NOW()),

-- DeepSeek
('DeepSeek Chat', 'deepseek-chat',     'deepseek', 'DeepSeek',  'deepseek-chat',    'https://api.deepseek.com/v1/chat/completions',         0.7, 4096, 64000,  '1', '0', 'DeepSeek对话模型', NOW()),
('DeepSeek Coder','deepseek-coder',    'deepseek', 'DeepSeek',  'deepseek-coder',   'https://api.deepseek.com/v1/chat/completions',         0.7, 4096, 64000,  '1', '0', 'DeepSeek代码模型', NOW()),

-- Claude (Anthropic)
('Claude 3.5 Sonnet', 'claude-sonnet', 'anthropic', 'Anthropic', 'claude-3-5-sonnet-20241022', 'https://api.anthropic.com/v1/messages', 0.7, 4096, 200000, '1', '1', 'Claude最新模型', NOW()),

-- 本地部署 Ollama
('Ollama Llama3', 'ollama-llama3',     'ollama',   '本地部署',   'llama3',           'http://localhost:11434/v1/chat/completions',           0.7, 4096, 8000,   '1', '0', '本地Llama3模型', NOW()),
('Ollama Qwen',   'ollama-qwen',       'ollama',   '本地部署',   'qwen:7b',          'http://localhost:11434/v1/chat/completions',           0.7, 4096, 8000,   '1', '0', '本地Qwen模型', NOW());

-- =========================================
-- 菜单配置（简化版）
-- =========================================
-- 删除旧的AI管理菜单
DELETE FROM sys_menu WHERE menu_id IN (2010, 2011, 2012, 2013, 2014, 2015, 2016);

-- 添加简化版菜单
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
(2010, 'AI助手',        0,     10, 'ai',            NULL,                          NULL, NULL, 1, 0, 'M', '0', '0', '',                    'robot',    'admin', NOW(), 'AI功能模块'),
(2011, 'AI对话',        2010,  1,  'chat',          'system/ai/chat/index',        NULL, NULL, 1, 0, 'C', '0', '0', 'ai:chat:list',        'message',  'admin', NOW(), 'AI对话界面'),
(2012, '服务配置',      2010,  2,  'service',       'system/ai/service/index',     NULL, NULL, 1, 0, 'C', '0', '0', 'ai:service:list',     'setting',  'admin', NOW(), 'AI服务配置');

-- 服务配置权限按钮
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
(201201, '服务查询',    2012,  1,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:query',    '',         'admin', NOW(), ''),
(201202, '服务新增',    2012,  2,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:add',      '',         'admin', NOW(), ''),
(201203, '服务修改',    2012,  3,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:edit',     '',         'admin', NOW(), ''),
(201204, '服务删除',    2012,  4,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:remove',   '',         'admin', NOW(), ''),
(201205, '查看密钥',    2012,  5,  '',              NULL,                          NULL, NULL, 1, 0, 'F', '0', '0', 'ai:service:viewkey',  '',         'admin', NOW(), '查看完整API Key（敏感操作）');
