-- 创建数据库
CREATE DATABASE IF NOT EXISTS message_archive CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE message_archive;
CREATE TABLE IF NOT EXISTS message_archive.messages
(
    id             int auto_increment comment '自增主键ID'
        primary key,
    group_id       varchar(20)  null comment '群ID',
    timestamp      varchar(20)  not null comment '消息时间戳',
    sender         varchar(255) not null comment '发送者微信ID',
    content        text         null comment '消息内容',
    message_type   varchar(50)  null comment '消息类型（文本、图片、视频等）',
    attachment_url varchar(512) null comment '附件URL（图片、视频链接）',
    message_id     varchar(32)  null comment '消息 id',
    message_xml    text         null comment '消息 xml 部分',
    message_thumb  text         null comment '视频或图片消息的缩略图路径'
)
    comment '微信群消息存储表，记录所有群聊消息';

CREATE TABLE IF NOT EXISTS message_archive.speech_counts
(
    id       int auto_increment comment '自增主键ID'
        primary key,
    group_id text null comment '群聊ID',
    wx_id    text null comment '用户微信ID',
    date     text null comment '统计日期（YYYY-MM-DD格式）',
    count    int  null comment '发言次数',
    constraint speech_counts_group_id_wx_id_date_uindex
        unique (group_id, wx_id, date) using hash
)
    comment '群成员每日发言统计表';

CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_active_tasks
(
    active_task_id int auto_increment comment '任务ID'
        primary key,
    group_id       varchar(50)                                               not null comment '群聊ID',
    question       varchar(255)                                              not null comment '问题内容',
    answer         varchar(100)                                              not null comment '正确答案',
    score          int                                                       not null comment '答对可获得的分数',
    description    text                                                      null comment '问题描述或提示',
    holder_id      varchar(50)                                               not null comment '出题人ID',
    assigned_at    datetime                      default current_timestamp() null comment '任务分配时间',
    status         enum ('pending', 'completed') default 'pending'           null comment '任务状态',
    question_id    int                                                       null comment '问题ID'
)
    comment '百科答题游戏活跃任务表';

create or replace index group_id
    on message_archive.t_encyclopedia_active_tasks (group_id);

create or replace index question_id
    on message_archive.t_encyclopedia_active_tasks (question_id);

CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_groups
(
    group_id   varchar(50)                          not null comment '群聊ID'
        primary key,
    created_at datetime default current_timestamp() null comment '记录创建时间'
)
    comment '百科答题游戏群聊表';

CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_players
(
    player_id   varchar(50)                          not null comment '玩家ID（微信ID）',
    group_id    varchar(50)                          not null comment '群聊ID',
    player_name varchar(50)                          not null comment '玩家名称',
    points      int      default 0                   null comment '玩家积分',
    created_at  datetime default current_timestamp() null comment '记录创建时间',
    primary key (player_id, group_id)
)
    comment '百科答题游戏玩家表';

CREATE TABLE IF NOT EXISTS message_archive.t_encyclopedia_task_history
(
    history_id     int auto_increment comment '历史记录ID'
        primary key,
    group_id       varchar(50)                            not null comment '群聊ID',
    active_task_id int                                    not null comment '关联的任务ID',
    player_id      varchar(50)                            not null comment '回答者ID',
    answer         varchar(100)                           not null comment '玩家的回答',
    is_correct     tinyint(1) default 0                   null comment '是否回答正确',
    points_earned  int        default 0                   null comment '获得的积分',
    completed_at   datetime   default current_timestamp() null comment '完成时间'
)
    comment '百科答题游戏任务历史表';

create or replace index group_id
    on message_archive.t_encyclopedia_task_history (group_id);

CREATE TABLE IF NOT EXISTS message_archive.t_sign_record
(
    id            bigint auto_increment comment '自增主键ID'
        primary key,
    wx_id         varchar(100)                         not null comment '用户微信ID',
    group_id      varchar(100)                         not null comment '群聊ID',
    wx_nick_name  varchar(100)                         not null comment '用户昵称',
    points        int      default 0                   null comment '积分数量',
    sign_stat     datetime                             null comment '最近签到时间',
    signin_streak int      default 0                   null comment '连续签到天数',
    create_time   datetime default current_timestamp() null comment '记录创建时间',
    update_time   datetime default current_timestamp() null on update current_timestamp() comment '记录更新时间',
    constraint unique_sign
        unique (wx_id, group_id)
)
    comment '用户群内签到记录表';

CREATE TABLE IF NOT EXISTS message_archive.tasks
(
    task_id          int auto_increment comment '任务ID'
        primary key,
    task_description varchar(255)                                              not null comment '任务描述',
    reminder_time    time                                                      not null comment '提醒时间',
    task_type        enum ('single', 'recurring')  default 'single'            null comment '任务类型：单次或周期性',
    status           enum ('pending', 'completed') default 'pending'           null comment '任务状态：待办或已完成',
    created_at       timestamp                     default current_timestamp() null comment '创建时间'
)
    comment '机器人定时任务表';

