-- AI虚拟用户新闻互动系统 数据库初始化脚本
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- 虚拟用户表
CREATE TABLE IF NOT EXISTS `virtual_users` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `nickname` varchar(64) NOT NULL COMMENT '昵称',
  `account` varchar(128) NOT NULL COMMENT '新闻平台账号',
  `password_enc` varchar(512) NOT NULL COMMENT 'AES加密密码',
  `avatar_url` varchar(512) DEFAULT NULL COMMENT '头像URL',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '0未登录 1登录中 2已登录 3登录失效 4封禁',
  `activity_level` tinyint NOT NULL DEFAULT 1 COMMENT '0低 1中 2高',
  `daily_comment_limit` int NOT NULL DEFAULT 10 COMMENT '每日最大评论次数',
  `daily_like_limit` int NOT NULL DEFAULT 30 COMMENT '每日最大点赞次数',
  `today_comment_count` int NOT NULL DEFAULT 0 COMMENT '今日已评论次数',
  `today_like_count` int NOT NULL DEFAULT 0 COMMENT '今日已点赞次数',
  `total_interactions` int NOT NULL DEFAULT 0 COMMENT '累计互动次数',
  `session_token` text DEFAULT NULL COMMENT '当前会话Token',
  `session_expires_at` datetime DEFAULT NULL COMMENT '会话过期时间',
  `last_login_at` datetime DEFAULT NULL COMMENT '最后登录时间',
  `last_interact_at` datetime DEFAULT NULL COMMENT '最后互动时间',
  `real_name` varchar(64) DEFAULT NULL COMMENT '真实姓名（平台同步）',
  `sex` tinyint(1) NOT NULL DEFAULT 0 COMMENT '性别 0未知 1男 2女',
  `platform_uid` varchar(64) DEFAULT NULL COMMENT '平台用户ID',
  `remark` varchar(256) DEFAULT NULL COMMENT '备注',
  `is_enabled` tinyint NOT NULL DEFAULT 1 COMMENT '1启用 0禁用',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_account` (`account`),
  UNIQUE KEY `uk_nickname` (`nickname`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='虚拟用户表';

-- 用户人格表
CREATE TABLE IF NOT EXISTS `user_personalities` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `character_type` varchar(32) DEFAULT NULL COMMENT '性格类型:开朗/内敛/毒舌/温和',
  `language_style` varchar(32) DEFAULT NULL COMMENT '语言风格:严肃/幽默/文艺/吐槽',
  `interest_tags` json DEFAULT NULL COMMENT '兴趣偏好JSON数组',
  `interact_tendency` varchar(32) DEFAULT NULL COMMENT '互动倾向:爱评论/爱点赞/潜水',
  `word_count_min` int DEFAULT 20 COMMENT '最少字数',
  `word_count_max` int DEFAULT 100 COMMENT '最多字数',
  `personality_desc` text DEFAULT NULL COMMENT 'AI生成的人格描述',
  `comment_style_prompt` text DEFAULT NULL COMMENT '评论风格提示词',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户人格表';

-- 互动记录表
CREATE TABLE IF NOT EXISTS `interaction_records` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL COMMENT '虚拟用户ID',
  `user_nickname` varchar(64) DEFAULT NULL COMMENT '用户昵称',
  `user_account` varchar(128) DEFAULT NULL COMMENT '用户账号',
  `article_id` varchar(64) DEFAULT NULL COMMENT '文章ID',
  `article_title` varchar(256) DEFAULT NULL COMMENT '文章标题',
  `interact_type` varchar(16) NOT NULL COMMENT 'comment/reply/like/collect/forward',
  `content` text DEFAULT NULL COMMENT '评论/回复内容',
  `parent_comment_id` varchar(64) DEFAULT NULL COMMENT '父评论ID(回复时用)',
  `session_id` varchar(128) DEFAULT NULL COMMENT '登录会话ID',
  `token_consumed` int DEFAULT 0 COMMENT '消耗Token数',
  `status` tinyint NOT NULL DEFAULT 0 COMMENT '0执行中 1成功 2失败',
  `error_msg` varchar(512) DEFAULT NULL COMMENT '失败原因',
  `retry_count` tinyint DEFAULT 0 COMMENT '重试次数',
  `executed_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_executed_at` (`executed_at`),
  KEY `idx_interact_type` (`interact_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='互动记录表';

-- Token消耗统计表
CREATE TABLE IF NOT EXISTS `token_stats` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `stat_date` date NOT NULL COMMENT '统计日期',
  `model_name` varchar(64) DEFAULT NULL COMMENT '模型名称',
  `total_tokens` int NOT NULL DEFAULT 0 COMMENT '当日消耗总Token',
  `prompt_tokens` int NOT NULL DEFAULT 0 COMMENT 'Prompt Token',
  `completion_tokens` int NOT NULL DEFAULT 0 COMMENT 'Completion Token',
  `call_count` int NOT NULL DEFAULT 0 COMMENT '调用次数',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_stat_date` (`stat_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Token消耗统计表';

-- AI模型配置表
CREATE TABLE IF NOT EXISTS `ai_model_configs` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `model_name` varchar(64) NOT NULL COMMENT '模型名称',
  `provider` varchar(32) NOT NULL COMMENT 'openai/zhipu/wenxin/qianwen/local',
  `api_base_url` varchar(256) DEFAULT NULL COMMENT 'API地址',
  `api_key_enc` varchar(512) DEFAULT NULL COMMENT '加密API Key',
  `model_version` varchar(64) DEFAULT NULL COMMENT '模型版本',
  `temperature` float DEFAULT 0.7 COMMENT '温度',
  `max_tokens` int DEFAULT 1000 COMMENT '最大Token',
  `timeout_seconds` int DEFAULT 30 COMMENT '超时秒数',
  `is_default` tinyint NOT NULL DEFAULT 0 COMMENT '是否默认模型',
  `is_enabled` tinyint NOT NULL DEFAULT 1 COMMENT '是否启用',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='AI模型配置表';

-- 系统配置表
CREATE TABLE IF NOT EXISTS `system_configs` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `config_key` varchar(64) NOT NULL COMMENT '配置键',
  `config_value` text DEFAULT NULL COMMENT '配置值',
  `config_type` varchar(16) DEFAULT 'string' COMMENT '类型:string/int/json/bool',
  `description` varchar(256) DEFAULT NULL COMMENT '说明',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';

-- 登录日志表
CREATE TABLE IF NOT EXISTS `login_logs` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `user_id` bigint NOT NULL,
  `user_account` varchar(128) DEFAULT NULL,
  `action` varchar(16) NOT NULL COMMENT 'login/logout/refresh/fail',
  `session_id` varchar(128) DEFAULT NULL,
  `ip_address` varchar(64) DEFAULT NULL,
  `error_msg` varchar(512) DEFAULT NULL,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录日志表';

-- 初始系统配置
INSERT INTO `system_configs` (`config_key`, `config_value`, `config_type`, `description`) VALUES
('interact_time_start', '08:00', 'string', '互动开始时间'),
('interact_time_end', '22:00', 'string', '互动结束时间'),
('interact_interval_min', '300', 'int', '互动最小间隔(秒)'),
('interact_interval_max', '1800', 'int', '互动最大间隔(秒)'),
('max_concurrent_users', '5', 'int', '并发登录用户数上限'),
('daily_token_limit', '100000', 'int', '每日全局Token上限'),
('today_token_used', '0', 'int', '今日已使用Token'),
('token_limit_reached', 'false', 'bool', 'Token限额是否已达上限'),
-- 目标平台接口配置
('news_platform_base_url', 'http://192.168.1.200:63120', 'string', '新闻业务平台接口地址'),
('auth_base_url', 'http://192.168.1.200:60040', 'string', '认证服务接口地址'),
-- 目标平台客户端参数（需根据实际情况配置）
('platform_app_id', '', 'string', '平台appId（客户端标识）'),
('platform_access_id', '', 'string', '平台accessId（客户端accessId）'),
('platform_access_secret', '', 'string', '平台accessSecret（签名密钥，可为空）'),
('platform_client_code', '', 'string', '平台clientCode（登录用）'),
('platform_org_id', '', 'string', '平台组织Id（orgId，新闻列表必填）'),
-- 互动概率
('comment_probability', '0.4', 'string', '评论触发概率'),
('reply_probability', '0.2', 'string', '回复触发概率'),
('like_probability', '0.6', 'string', '点赞触发概率'),
('collect_probability', '0.3', 'string', '收藏触发概率'),
('forward_probability', '0.15', 'string', '转发触发概率'),
('system_start_time', NULL, 'string', '系统启动时间'),
('scheduler_enabled', 'true', 'bool', '调度器是否启用')
ON DUPLICATE KEY UPDATE config_value = VALUES(config_value);

SET FOREIGN_KEY_CHECKS = 1;
