-- 任务分类表
DROP TABLE IF EXISTS `kku_task_categories`;
CREATE TABLE `kku_task_categories` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '分类ID，主键',
  `name` varchar(100) NOT NULL COMMENT '分类名称',
  `code` varchar(50) NOT NULL COMMENT '分类编码（唯一）',
  `description` varchar(255) DEFAULT NULL COMMENT '分类描述',
  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序顺序',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务分类表';

-- 任务定义表
DROP TABLE IF EXISTS `kku_task_tasks`;
CREATE TABLE `kku_task_tasks` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '任务ID，主键',
  `category_id` int NOT NULL COMMENT '任务分类ID，外键关联kku_task_categories表',
  `name` varchar(100) NOT NULL COMMENT '任务名称',
  `description` varchar(500) DEFAULT NULL COMMENT '任务描述',
  `type` varchar(20) NOT NULL COMMENT '任务类型（daily, weekly, achievement, event, tutorial, team）',
  `target_type` varchar(30) NOT NULL COMMENT '目标类型（plant, harvest, upgrade_land等）',
  `target_params` json DEFAULT NULL COMMENT '目标参数（JSON格式，如特定作物ID）',
  `target_count` int NOT NULL DEFAULT '1' COMMENT '目标数量',
  `rewards` json NOT NULL COMMENT '奖励内容（JSON格式）',
  `prerequisite_tasks` json DEFAULT NULL COMMENT '前置任务ID（JSON格式）',
  `level_required` int NOT NULL DEFAULT '0' COMMENT '所需等级',
  `time_limit` int DEFAULT NULL COMMENT '时间限制（秒，NULL表示无限制）',
  `reset_type` varchar(20) NOT NULL DEFAULT 'none' COMMENT '重置类型（none, daily, weekly, monthly）',
  `is_active` tinyint NOT NULL DEFAULT '1' COMMENT '是否激活（0:否, 1:是）',
  `start_time` timestamp NULL DEFAULT NULL COMMENT '开始时间（NULL表示立即开始）',
  `end_time` timestamp NULL DEFAULT NULL COMMENT '结束时间（NULL表示永不结束）',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_category` (`category_id`),
  KEY `idx_type` (`type`),
  KEY `idx_target_type` (`target_type`),
  KEY `idx_active_time` (`is_active`, `start_time`, `end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务定义表';

-- 用户任务关联表
DROP TABLE IF EXISTS `kku_task_user_tasks`;
CREATE TABLE `kku_task_user_tasks` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID，主键',
  `user_id` int NOT NULL COMMENT '用户ID',
  `task_id` int NOT NULL COMMENT '任务ID，外键关联kku_task_tasks表',
  `status` tinyint NOT NULL DEFAULT '0' COMMENT '状态（0:未接取, 1:进行中, 2:已完成, 3:已领取奖励, 4:已失败, 5:已过期）',
  `progress` int NOT NULL DEFAULT '0' COMMENT '当前进度',
  `completed_at` timestamp NULL DEFAULT NULL COMMENT '完成时间',
  `rewarded_at` timestamp NULL DEFAULT NULL COMMENT '奖励发放时间',
  `expire_at` timestamp NULL DEFAULT NULL COMMENT '过期时间',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_user_task` (`user_id`, `task_id`),
  KEY `idx_user_status` (`user_id`, `status`),
  KEY `idx_task` (`task_id`),
  KEY `idx_expire` (`expire_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务关联表';

-- 用户任务进度表
DROP TABLE IF EXISTS `kku_task_user_progress`;
CREATE TABLE `kku_task_user_progress` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID，主键',
  `user_id` int NOT NULL COMMENT '用户ID',
  `task_id` int NOT NULL COMMENT '任务ID，外键关联kku_task_tasks表',
  `target_id` varchar(100) NOT NULL COMMENT '目标ID（如特定作物ID、物品ID等）',
  `current_count` int NOT NULL DEFAULT '0' COMMENT '当前计数',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_user_task_target` (`user_id`, `task_id`, `target_id`),
  KEY `idx_user_task` (`user_id`, `task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户任务进度表';

-- 任务完成日志表
DROP TABLE IF EXISTS `kku_task_completion_logs`;
CREATE TABLE `kku_task_completion_logs` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID，主键',
  `user_id` int NOT NULL COMMENT '用户ID',
  `task_id` int NOT NULL COMMENT '任务ID，外键关联kku_task_tasks表',
  `completed_at` timestamp NOT NULL COMMENT '完成时间',
  `time_spent` int DEFAULT NULL COMMENT '完成耗时（秒）',
  `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址',
  `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_task` (`task_id`),
  KEY `idx_completed_at` (`completed_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务完成日志表';

-- 任务奖励发放日志表
DROP TABLE IF EXISTS `kku_task_reward_logs`;
CREATE TABLE `kku_task_reward_logs` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID，主键',
  `user_id` int NOT NULL COMMENT '用户ID',
  `task_id` int NOT NULL COMMENT '任务ID，外键关联kku_task_tasks表',
  `user_task_id` int NOT NULL COMMENT '用户任务ID，外键关联kku_task_user_tasks表',
  `rewards` json NOT NULL COMMENT '奖励内容（JSON格式）',
  `rewarded_at` timestamp NOT NULL COMMENT '奖励发放时间',
  `ip_address` varchar(45) DEFAULT NULL COMMENT 'IP地址',
  `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_task` (`task_id`),
  KEY `idx_user_task` (`user_task_id`),
  KEY `idx_rewarded_at` (`rewarded_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务奖励发放日志表';

-- 任务重置日志表
DROP TABLE IF EXISTS `kku_task_reset_logs`;
CREATE TABLE `kku_task_reset_logs` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '记录ID，主键',
  `reset_type` varchar(20) NOT NULL COMMENT '重置类型（daily, weekly, monthly）',
  `reset_time` timestamp NOT NULL COMMENT '重置时间',
  `affected_tasks` json DEFAULT NULL COMMENT '受影响的任务ID列表（JSON格式）',
  `affected_count` int NOT NULL DEFAULT '0' COMMENT '受影响的任务数量',
  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_reset_type` (`reset_type`),
  KEY `idx_reset_time` (`reset_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务重置日志表';
