CREATE DATABASE IF NOT EXISTS wy_media DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE wy_media;

-- ------------------------------
-- 1. 媒体文件信息表（全局媒体文件存储）
-- ------------------------------
CREATE TABLE `media_file` (
                              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                              `original_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
                              `file_name` VARCHAR(255) NOT NULL COMMENT '存储文件名（系统生成的唯一文件名）',
                              `file_type` VARCHAR(20) NOT NULL COMMENT '文件类型：image、audio、video',
                              `file_size` BIGINT COMMENT '文件大小（字节）',
                              `bucket_name` VARCHAR(100) NOT NULL COMMENT '存储桶名称',
                              `file_url` VARCHAR(500) NOT NULL COMMENT '文件访问URL',
                              `storage_type` VARCHAR(20) DEFAULT 'minio' COMMENT '存储类型（oss、local、minio等）',
                              `status` TINYINT DEFAULT 0 COMMENT '文件状态：0-正常，1-已删除（逻辑删除）',
                              `md5` VARCHAR(32) COMMENT '文件MD5值',
                              `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                              INDEX `idx_file_type` (`file_type`),
                              INDEX `idx_bucket_name` (`bucket_name`),
                              INDEX `idx_create_time` (`create_time`),
                              INDEX `idx_md5` (`md5`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='媒体文件信息表';

-- ------------------------------
-- 2. 艺人媒体文件历史记录表（关联artist服务的artist.id、本服务的media_file表）
-- ------------------------------
CREATE TABLE `artist_media_history` (
                                        `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                                        `artist_id` INT NOT NULL COMMENT '关联artist服务的artist.id',
                                        `media_type` VARCHAR(20) NOT NULL COMMENT '媒体类型: avatar、header_image等',
                                        `media_file_id` BIGINT NOT NULL COMMENT '关联本服务的media_file.id',
                                        `is_current` TINYINT DEFAULT 1 COMMENT '是否为当前使用版本：0-否，1-是',
                                        `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                        FOREIGN KEY (`media_file_id`) REFERENCES `media_file` (`id`) ON DELETE RESTRICT,
                                        UNIQUE KEY `uk_artist_media_current` (`artist_id`, `media_type`, `is_current`),
                                        INDEX `idx_artist_id` (`artist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='艺人媒体文件历史记录表';

-- ------------------------------
-- 3. 分块上传信息表
-- ------------------------------
CREATE TABLE `chunk_info` (
                              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                              `file_md5` VARCHAR(32) NOT NULL COMMENT '文件MD5',
                              `file_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
                              `chunk_index` INT NOT NULL COMMENT '分块索引',
                              `total_chunks` INT NOT NULL COMMENT '总分块数',
                              `chunk_url` VARCHAR(500) COMMENT '分块文件URL',
                              `status` TINYINT DEFAULT 0 COMMENT '状态：0-待上传，1-已上传',
                              `uploaded_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
                              `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              INDEX `idx_file_md5` (`file_md5`),
                              INDEX `idx_chunk_index` (`chunk_index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分块上传信息表';

-- ------------------------------
-- 4. 媒体处理任务表
-- ------------------------------
CREATE TABLE `media_process` (
                                 `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                                 `file_id` VARCHAR(32) NOT NULL COMMENT '文件ID',
                                 `file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
                                 `bucket` VARCHAR(100) NOT NULL COMMENT '存储桶',
                                 `file_path` VARCHAR(500) NOT NULL COMMENT '文件路径',
                                 `status` VARCHAR(10) DEFAULT '0' COMMENT '任务状态: 0-待处理, 1-处理中, 2-处理成功, 3-处理失败',
                                 `fail_count` INT DEFAULT 0 COMMENT '失败次数',
                                 `errormsg` VARCHAR(1000) COMMENT '错误信息',
                                 `url` VARCHAR(500) COMMENT '处理后文件URL',
                                 `finish_date` DATETIME COMMENT '完成时间',
                                 `create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                 `process_definition_id` VARCHAR(50) COMMENT '流程定义ID',
                                 `tag` VARCHAR(50) COMMENT '标签',
                                 INDEX `idx_status` (`status`),
                                 INDEX `idx_file_id` (`file_id`),
                                 INDEX `idx_create_date` (`create_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='媒体处理任务表';

-- ------------------------------
-- 5. 媒体处理历史表
-- ------------------------------
CREATE TABLE `media_process_history` (
                                         `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                                         `process_id` BIGINT COMMENT '对应的任务ID',
                                         `file_id` VARCHAR(32) NOT NULL COMMENT '文件ID',
                                         `file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
                                         `bucket` VARCHAR(100) NOT NULL COMMENT '存储桶',
                                         `file_path` VARCHAR(500) NOT NULL COMMENT '文件路径',
                                         `status` VARCHAR(10) COMMENT '处理状态',
                                         `errormsg` VARCHAR(1000) COMMENT '错误信息',
                                         `url` VARCHAR(500) COMMENT '处理后URL',
                                         `finish_date` DATETIME COMMENT '完成时间',
                                         `create_date` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                         INDEX `idx_process_id` (`process_id`),
                                         INDEX `idx_file_id` (`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='媒体处理历史表';

-- ------------------------------
-- 6. 视频文件表（用于存储视频相关信息）
-- ------------------------------
CREATE TABLE `media_video` (
                               `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                               `original_name` VARCHAR(255) NOT NULL COMMENT '原始文件名',
                               `file_name` VARCHAR(255) NOT NULL COMMENT '存储文件名',
                               `file_url` VARCHAR(500) COMMENT '视频文件URL',
                               `preview_gif_url` VARCHAR(500) COMMENT '预览GIF URL',
                               `file_size` BIGINT COMMENT '文件大小',
                               `duration` VARCHAR(20) COMMENT '视频时长',
                               `singer` VARCHAR(100) COMMENT '上传歌手',
                               `bucket_name` VARCHAR(50) COMMENT '存储桶名',
                               `status` TINYINT DEFAULT 0 COMMENT '状态：0-待处理，1-处理中，2-已完成，3-处理失败',
                               `process_progress` DECIMAL(5,2) DEFAULT 0.00 COMMENT '处理进度(%)',
                               `retry_count` TINYINT DEFAULT 0 COMMENT '重试次数',
                               `created_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                               `updated_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                               `processed_time` TIMESTAMP NULL COMMENT '处理完成时间',
                               INDEX `idx_status` (`status`),
                               INDEX `idx_created_time` (`created_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='视频文件表';

-- ------------------------------
-- 7. 视频处理队列表
-- ------------------------------
CREATE TABLE `video_process_queue` (
                                       `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                                       `video_id` BIGINT NOT NULL COMMENT '视频ID',
                                       `priority` TINYINT DEFAULT 1 COMMENT '优先级：1-普通，2-高',
                                       `status` TINYINT DEFAULT 0 COMMENT '0-待处理，1-已调度，2-已完成',
                                       `scheduled_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '调度时间',
                                       INDEX `idx_status_priority` (`status`, `priority`, `scheduled_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='视频处理队列表';

-- ------------------------------
-- 8. 系统配置表
-- ------------------------------
CREATE TABLE `sys_config` (
                              `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
                              `config_key` VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
                              `config_value` TEXT COMMENT '配置值',
                              `description` VARCHAR(255) COMMENT '配置描述',
                              `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
                              INDEX `idx_config_key` (`config_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';

-- ------------------------------
-- 9. 初始化系统配置
-- ------------------------------
INSERT INTO `sys_config` (`config_key`, `config_value`, `description`) VALUES
                                                                           ('ffmpeg.path', '/usr/local/bin/ffmpeg', 'FFmpeg可执行文件路径'),
                                                                           ('video.max_size', '104857600', '视频最大上传大小（字节），100MB'),
                                                                           ('chunk.size', '2097152', '分块大小（字节），2MB'),
                                                                           ('max.concurrent.tasks', '5', '最大并发处理任务数'),
                                                                           ('max.retry.count', '3', '最大重试次数'),
                                                                           ('temp.dir', '/tmp/media_temp', '临时文件目录');