-- 情感博物馆数据库初始化脚本
-- 作者: emotion-museum
-- 日期: 2025-07-22

-- 创建数据库
CREATE DATABASE IF NOT EXISTS emotion DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE emotion;

-- 删除已存在的表（开发阶段）
DROP TABLE IF EXISTS message;
DROP TABLE IF EXISTS conversation;
DROP TABLE IF EXISTS coze_api_call;
DROP TABLE IF EXISTS emotion_record;
DROP TABLE IF EXISTS user;

-- 创建用户表
CREATE TABLE user (
    id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '用户ID',
    username VARCHAR(50) NOT NULL COMMENT '用户名',
    account VARCHAR(50) NOT NULL UNIQUE COMMENT '账号',
    password VARCHAR(255) NOT NULL COMMENT '密码',
    email VARCHAR(100) COMMENT '邮箱',
    phone VARCHAR(20) COMMENT '手机号',
    nickname VARCHAR(50) COMMENT '昵称',
    avatar VARCHAR(500) COMMENT '头像URL',
    gender TINYINT DEFAULT 0 COMMENT '性别：0-未知，1-男，2-女',
    bio TEXT COMMENT '个人简介',
    member_level VARCHAR(20) DEFAULT 'free' COMMENT '会员等级',
    total_days INT DEFAULT 0 COMMENT '总天数',
    status TINYINT DEFAULT 1 COMMENT '状态：0-禁用，1-正常',
    is_verified TINYINT DEFAULT 0 COMMENT '是否验证：0-未验证，1-已验证',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    last_active_time DATETIME COMMENT '最后活跃时间',
    create_by VARCHAR(32) COMMENT '创建人',
    update_by VARCHAR(32) COMMENT '更新人',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',
    remarks TEXT COMMENT '备注',
    INDEX idx_account (account),
    INDEX idx_email (email),
    INDEX idx_phone (phone),
    INDEX idx_status (status),
    INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';

-- 创建对话表
CREATE TABLE conversation (
    id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '对话ID',
    user_id VARCHAR(32) COMMENT '用户ID',
    title VARCHAR(200) NOT NULL COMMENT '对话标题',
    type VARCHAR(20) DEFAULT 'user' COMMENT '对话类型：user-用户对话，guest-访客对话',
    start_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '开始时间',
    end_time DATETIME COMMENT '结束时间',
    message_count INT DEFAULT 0 COMMENT '消息数量',
    status TINYINT DEFAULT 1 COMMENT '状态：0-结束，1-进行中',
    client_ip VARCHAR(50) COMMENT '客户端IP（访客模式）',
    user_agent TEXT COMMENT '用户代理（访客模式）',
    coze_conversation_id VARCHAR(100) COMMENT 'Coze对话ID',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    create_by VARCHAR(32) COMMENT '创建人',
    update_by VARCHAR(32) COMMENT '更新人',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',
    remarks TEXT COMMENT '备注',
    INDEX idx_user_id (user_id),
    INDEX idx_type (type),
    INDEX idx_status (status),
    INDEX idx_create_time (create_time),
    INDEX idx_client_ip (client_ip)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='对话表';

-- 创建消息表
CREATE TABLE message (
    id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '消息ID',
    conversation_id VARCHAR(32) NOT NULL COMMENT '对话ID',
    user_id VARCHAR(32) COMMENT '用户ID',
    content TEXT NOT NULL COMMENT '消息内容',
    content_type VARCHAR(20) DEFAULT 'text' COMMENT '消息类型：text-文本，image-图片，file-文件',
    sender_type VARCHAR(20) NOT NULL COMMENT '发送者类型：user-用户，ai-AI，system-系统',
    sender_id VARCHAR(32) COMMENT '发送者ID',
    status VARCHAR(20) DEFAULT 'sent' COMMENT '消息状态：sending-发送中，sent-已发送，delivered-已送达，read-已读，failed-失败',
    send_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '发送时间',
    is_read TINYINT DEFAULT 0 COMMENT '是否已读：0-未读，1-已读',
    parent_message_id VARCHAR(32) COMMENT '父消息ID（用于回复链）',
    coze_role VARCHAR(20) COMMENT 'Coze消息角色 (user/assistant/system)',
    coze_message_id VARCHAR(100) COMMENT 'Coze消息ID',
    error_message TEXT COMMENT '错误信息',
    retry_count INT DEFAULT 0 COMMENT '重试次数',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    create_by VARCHAR(32) COMMENT '创建人',
    update_by VARCHAR(32) COMMENT '更新人',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',
    remarks TEXT COMMENT '备注',
    INDEX idx_conversation_id (conversation_id),
    INDEX idx_user_id (user_id),
    INDEX idx_sender_type (sender_type),
    INDEX idx_send_time (send_time),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='消息表';

-- 创建Coze API调用记录表
CREATE TABLE coze_api_call (
    id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '记录ID',
    conversation_id VARCHAR(32) COMMENT '对话ID',
    user_id VARCHAR(32) COMMENT '用户ID',
    user_message TEXT COMMENT '用户消息',
    ai_reply TEXT COMMENT 'AI回复',
    api_request_data TEXT COMMENT 'API请求数据',
    api_response_data TEXT COMMENT 'API响应数据',
    call_status TINYINT DEFAULT 1 COMMENT '调用状态：1-成功，0-失败',
    error_message TEXT COMMENT '错误信息',
    response_time_ms INT COMMENT '响应时间(毫秒)',
    api_type VARCHAR(20) DEFAULT 'chat' COMMENT 'API类型：chat-聊天，emotion-情绪分析',
    client_ip VARCHAR(50) COMMENT '客户端IP',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    create_by VARCHAR(32) COMMENT '创建人',
    update_by VARCHAR(32) COMMENT '更新人',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',
    remarks TEXT COMMENT '备注',
    INDEX idx_conversation_id (conversation_id),
    INDEX idx_user_id (user_id),
    INDEX idx_call_status (call_status),
    INDEX idx_create_time (create_time),
    INDEX idx_api_type (api_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Coze API调用记录表';

-- 创建情绪记录表
CREATE TABLE emotion_record (
    id VARCHAR(32) NOT NULL PRIMARY KEY COMMENT '记录ID',
    user_id VARCHAR(32) NOT NULL COMMENT '用户ID',
    record_date DATE NOT NULL COMMENT '记录日期',
    emotion_type VARCHAR(20) NOT NULL COMMENT '情绪类型：joy-喜悦，sadness-悲伤，anger-愤怒，fear-恐惧，surprise-惊讶，neutral-平静',
    intensity DECIMAL(3,2) DEFAULT 0.50 COMMENT '情绪强度 (0.00-1.00)',
    triggers TEXT COMMENT '触发因素',
    description TEXT COMMENT '描述',
    tags JSON COMMENT '标签',
    weather VARCHAR(50) COMMENT '天气',
    location VARCHAR(100) COMMENT '地点',
    activity VARCHAR(100) COMMENT '活动',
    people VARCHAR(200) COMMENT '相关人物',
    notes TEXT COMMENT '备注',
    analysis_result TEXT COMMENT '情绪分析结果',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    create_by VARCHAR(32) COMMENT '创建人',
    update_by VARCHAR(32) COMMENT '更新人',
    is_deleted TINYINT DEFAULT 0 COMMENT '是否删除：0-未删除，1-已删除',
    remarks TEXT COMMENT '备注',
    INDEX idx_user_id (user_id),
    INDEX idx_record_date (record_date),
    INDEX idx_emotion_type (emotion_type),
    INDEX idx_create_time (create_time),
    UNIQUE KEY uk_user_date (user_id, record_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='情绪记录表';

-- 插入测试数据
INSERT INTO user (id, username, account, password, email, nickname, member_level, total_days, status, is_verified, last_active_time) VALUES
('admin001', 'admin', 'admin', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iKXgwkOBbYbqnhHGGGKTAiYOUFlW', 'admin@emotion.com', '管理员', 'premium', 365, 1, 1, NOW()),
('test001', 'testuser', 'test', '$2a$10$N.zmdr9k7uOCQb376NoUnuTJ8iKXgwkOBbYbqnhHGGGKTAiYOUFlW', 'test@emotion.com', '测试用户', 'free', 30, 1, 1, NOW());

-- 插入测试对话
INSERT INTO conversation (id, user_id, title, type, start_time, message_count, status, client_ip) VALUES
('conv001', 'admin001', '我的第一次对话', 'user', NOW(), 2, 1, '127.0.0.1'),
('conv002', 'test001', '情绪咨询', 'user', NOW(), 1, 1, '127.0.0.1');

-- 插入测试消息
INSERT INTO message (id, conversation_id, user_id, content, sender_type, sender_id, status, send_time) VALUES
('msg001', 'conv001', 'admin001', '你好，我想了解一下情绪管理', 'user', 'admin001', 'sent', NOW()),
('msg002', 'conv001', 'admin001', '你好！我很高兴为你介绍情绪管理的相关知识。情绪管理是一项重要的生活技能...', 'ai', 'ai-assistant', 'sent', NOW()),
('msg003', 'conv002', 'test001', '我最近感觉压力很大', 'user', 'test001', 'sent', NOW());

-- 插入测试情绪记录
INSERT INTO emotion_record (id, user_id, record_date, emotion_type, intensity, triggers, description, tags, weather, location, activity) VALUES
('record001', 'admin001', CURDATE(), 'joy', 0.80, '完成了重要项目', '今天心情很好，完成了一个重要的项目', '["工作", "成就感"]', '晴天', '办公室', '工作'),
('record002', 'test001', CURDATE(), 'sadness', 0.60, '工作压力', '感觉有些压力和焦虑', '["工作", "压力"]', '阴天', '家里', '思考');

COMMIT;

-- 显示创建结果
SELECT 'Database initialization completed successfully!' as status;
