-- 任务中心 DDL（含列注释与表注释）

CREATE TABLE IF NOT EXISTS `task_center_tasks` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` VARCHAR(64) NOT NULL COMMENT '任务名称',
  `description` TEXT NULL COMMENT '任务描述',
  `status` TINYINT NOT NULL DEFAULT 1 COMMENT '任务状态：1启用 0停用',
  `start_time` DATETIME NULL COMMENT '任务开始时间',
  `end_time` DATETIME NULL COMMENT '任务结束时间',
  `visibility` TINYINT NOT NULL DEFAULT 1 COMMENT '展示开关：1展示 0隐藏',
  `conditions_schema` TEXT NULL COMMENT '规则DSL(JSON)，可选',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_status` (`status`),
  KEY `idx_visibility` (`visibility`),
  KEY `idx_time` (`start_time`,`end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-任务';

CREATE TABLE IF NOT EXISTS `task_center_task_tiers` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_id` BIGINT NOT NULL COMMENT '关联任务ID（task_center_tasks.id）',
  `metric` VARCHAR(32) NOT NULL COMMENT '指标：first_order|order_count|invite_count',
  `operator` VARCHAR(8) NOT NULL COMMENT '比较符：>= 或 ==',
  `threshold` BIGINT NOT NULL COMMENT '阈值（数量或布尔首单）',
  `window` VARCHAR(32) NOT NULL COMMENT '时间窗口：activity_period|since_registration',
  `repeatable` TINYINT NOT NULL DEFAULT 1 COMMENT '是否每档一次：0否 1是',
  `priority` INT NOT NULL DEFAULT 0 COMMENT '匹配优先级（数值越小越先匹配）',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_task` (`task_id`),
  KEY `idx_task_priority` (`task_id`,`priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-档位配置';

CREATE TABLE IF NOT EXISTS `task_center_task_rewards` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `task_id` BIGINT NOT NULL COMMENT '关联任务ID（task_center_tasks.id）',
  `tier_id` BIGINT NOT NULL COMMENT '关联档位ID（task_center_task_tiers.id）',
  `reward_type` VARCHAR(32) NOT NULL COMMENT '奖励类型：points|coupon|item_card|title',
  `reward_payload` TEXT NOT NULL COMMENT '奖励载荷(JSON)：各类型所需参数',
  `quantity` BIGINT NOT NULL DEFAULT 1 COMMENT '发放数量或上限（视类型）',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_task_tier` (`task_id`,`tier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-奖励配置';

CREATE TABLE IF NOT EXISTS `task_center_user_progress` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` BIGINT NOT NULL COMMENT '用户ID（users.id）',
  `task_id` BIGINT NOT NULL COMMENT '任务ID（task_center_tasks.id）',
  `order_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计完成订单数',
  `invite_count` BIGINT NOT NULL DEFAULT 0 COMMENT '累计有效邀请数',
  `first_order` TINYINT NOT NULL DEFAULT 0 COMMENT '首单标记：1是 0否',
  `claimed_tiers` TEXT NULL COMMENT '已领取档位ID数组(JSON)',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_user_task` (`user_id`,`task_id`),
  KEY `idx_user` (`user_id`),
  KEY `idx_task` (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-用户进度';

CREATE TABLE IF NOT EXISTS `task_center_event_logs` (
  `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `event_id` VARCHAR(64) NULL COMMENT '事件ID（字符串）',
  `source_type` VARCHAR(16) NULL COMMENT '来源类型：order|invite',
  `source_id` BIGINT NULL COMMENT '来源业务ID（订单ID或用户ID）',
  `user_id` BIGINT NULL COMMENT '用户ID（users.id）',
  `task_id` BIGINT NULL COMMENT '任务ID（task_center_tasks.id）',
  `tier_id` BIGINT NULL COMMENT '档位ID（task_center_task_tiers.id）',
  `idempotency_key` VARCHAR(128) NOT NULL COMMENT '幂等键：user:task:tier:source',
  `status` VARCHAR(16) NULL COMMENT '处理状态：granted|skipped|rejected',
  `result` TEXT NULL COMMENT '处理结果详情(JSON)',
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_idk` (`idempotency_key`),
  KEY `idx_user_task_tier` (`user_id`,`task_id`,`tier_id`),
  KEY `idx_event` (`event_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='任务中心-事件日志';
