-- =====================================================
-- 封禁系统数据库表结构
-- 包含用户封禁、房间封禁功能
-- =====================================================

-- 1. 用户封禁表（管理员对用户的封禁）
CREATE TABLE IF NOT EXISTS `eb_user_ban` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` int(11) NOT NULL COMMENT '被封禁的用户ID',
  `ban_type` varchar(20) NOT NULL DEFAULT 'permanent' COMMENT '封禁类型：permanent-永久, temporary-临时',
  `reason` varchar(500) DEFAULT '' COMMENT '封禁原因',
  `duration_days` int(11) DEFAULT NULL COMMENT '封禁天数（临时封禁时使用）',
  `expire_time` datetime DEFAULT NULL COMMENT '封禁到期时间（临时封禁时使用）',
  `operator_id` int(11) DEFAULT 0 COMMENT '操作人ID（管理员）',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态：1-生效中, 0-已解除',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_status` (`status`),
  KEY `idx_expire_time` (`expire_time`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户封禁记录表';

-- 2. 房间封禁表（管理员对直播间的封禁）
CREATE TABLE IF NOT EXISTS `eb_room_ban` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `room_id` int(11) NOT NULL COMMENT '被封禁的房间ID',
  `ban_type` varchar(20) NOT NULL DEFAULT 'permanent' COMMENT '封禁类型：permanent-永久, temporary-临时',
  `reason` varchar(500) DEFAULT '' COMMENT '封禁原因',
  `duration_days` int(11) DEFAULT NULL COMMENT '封禁天数（临时封禁时使用）',
  `expire_time` datetime DEFAULT NULL COMMENT '封禁到期时间（临时封禁时使用）',
  `operator_id` int(11) DEFAULT 0 COMMENT '操作人ID（管理员）',
  `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态：1-生效中, 0-已解除',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_room_id` (`room_id`),
  KEY `idx_status` (`status`),
  KEY `idx_expire_time` (`expire_time`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间封禁记录表';

-- 3. 确保用户黑名单表存在（用户间的拉黑）
CREATE TABLE IF NOT EXISTS `eb_user_blacklist` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` int(11) NOT NULL COMMENT '用户ID（发起拉黑的用户）',
  `blocked_user_id` int(11) NOT NULL COMMENT '被拉黑的用户ID',
  `blocker_nickname` varchar(100) DEFAULT '' COMMENT '拉黑者昵称',
  `blocker_avatar` varchar(500) DEFAULT '' COMMENT '拉黑者头像',
  `blocked_nickname` varchar(100) DEFAULT '' COMMENT '被拉黑者昵称',
  `blocked_avatar` varchar(500) DEFAULT '' COMMENT '被拉黑者头像',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_blocked` (`user_id`, `blocked_user_id`),
  KEY `idx_user_id` (`user_id`),
  KEY `idx_blocked_user_id` (`blocked_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户黑名单表';

-- 4. 确保房间黑名单表存在（直播间对用户的拉黑）
CREATE TABLE IF NOT EXISTS `eb_room_blacklist` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `room_id` int(11) NOT NULL COMMENT '房间ID',
  `room_name` varchar(200) DEFAULT '' COMMENT '房间名称',
  `blocked_user_id` int(11) NOT NULL COMMENT '被拉黑的用户ID',
  `blocked_user_nickname` varchar(100) DEFAULT '' COMMENT '被拉黑用户昵称',
  `blocked_user_avatar` varchar(500) DEFAULT '' COMMENT '被拉黑用户头像',
  `reason` varchar(500) DEFAULT '' COMMENT '拉黑原因',
  `operator_id` int(11) DEFAULT 0 COMMENT '操作人ID（主播或管理员）',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_room_user` (`room_id`, `blocked_user_id`),
  KEY `idx_room_id` (`room_id`),
  KEY `idx_blocked_user_id` (`blocked_user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='房间黑名单表';

-- 5. 添加测试数据
-- 用户封禁测试数据
INSERT IGNORE INTO eb_user_ban (user_id, ban_type, reason, duration_days, operator_id, status) VALUES
(999, 'permanent', '违规发布不良内容', NULL, 1, 1),
(998, 'temporary', '多次发送垃圾信息', 7, 1, 1);

-- 更新临时封禁的到期时间
UPDATE eb_user_ban SET expire_time = DATE_ADD(create_time, INTERVAL duration_days DAY) 
WHERE ban_type = 'temporary' AND duration_days IS NOT NULL AND expire_time IS NULL;

-- 6. 验证表结构
SELECT '=== 封禁系统表结构 ===' as info;
SHOW TABLES LIKE 'eb_%ban%';
SHOW TABLES LIKE 'eb_%blacklist%';

SELECT '=== 用户封禁记录 ===' as info;
SELECT * FROM eb_user_ban ORDER BY create_time DESC LIMIT 5;

SELECT '=== 房间封禁记录 ===' as info;
SELECT * FROM eb_room_ban ORDER BY create_time DESC LIMIT 5;

SELECT '=== 用户黑名单 ===' as info;
SELECT * FROM eb_user_blacklist ORDER BY create_time DESC LIMIT 5;

SELECT '=== 房间黑名单 ===' as info;
SELECT * FROM eb_room_blacklist ORDER BY create_time DESC LIMIT 5;
