package mysql

import "context"

func (r *Repository) ensureCPWeeklyRankTables(ctx context.Context) error {
	statements := []string{
		`CREATE TABLE IF NOT EXISTS cp_weekly_rank_configs (
		  app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
		  activity_code VARCHAR(64) NOT NULL DEFAULT 'cp_weekly_rank' COMMENT '活动编码',
		  enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
		  relation_type VARCHAR(32) NOT NULL DEFAULT 'cp' COMMENT '关系类型，当前固定 cp',
		  top_count INT NOT NULL DEFAULT 3 COMMENT '结算 Top 数量',
		  updated_by_admin_id BIGINT NOT NULL DEFAULT 0 COMMENT '最后更新管理员',
		  created_at_ms BIGINT NOT NULL COMMENT '创建时间，UTC epoch ms',
		  updated_at_ms BIGINT NOT NULL COMMENT '更新时间，UTC epoch ms',
		  PRIMARY KEY (app_code)
		) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CP 周榜配置表'`,
		`CREATE TABLE IF NOT EXISTS cp_weekly_rank_rewards (
		  app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
		  rank_no INT NOT NULL COMMENT '名次',
		  resource_group_id BIGINT NOT NULL COMMENT '奖励资源组 ID',
		  created_at_ms BIGINT NOT NULL COMMENT '创建时间，UTC epoch ms',
		  updated_at_ms BIGINT NOT NULL COMMENT '更新时间，UTC epoch ms',
		  PRIMARY KEY (app_code, rank_no)
		) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CP 周榜名次奖励资源组表'`,
		`CREATE TABLE IF NOT EXISTS cp_weekly_rank_settlements (
		  app_code VARCHAR(32) NOT NULL DEFAULT 'lalu' COMMENT '应用编码',
		  settlement_id VARCHAR(96) NOT NULL COMMENT '发奖记录 ID',
		  period_start_ms BIGINT NOT NULL COMMENT '周周期开始，UTC epoch ms',
		  period_end_ms BIGINT NOT NULL COMMENT '周周期结束，UTC epoch ms',
		  rank_no INT NOT NULL COMMENT '名次',
		  relationship_id VARCHAR(128) NOT NULL COMMENT '获奖 CP 关系 ID',
		  user_id BIGINT NOT NULL COMMENT '获奖用户 ID',
		  score BIGINT NOT NULL DEFAULT 0 COMMENT '关系周榜分数',
		  resource_group_id BIGINT NOT NULL COMMENT '发放资源组 ID',
		  wallet_command_id VARCHAR(192) NOT NULL COMMENT 'wallet 发奖幂等键',
		  wallet_grant_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'wallet grant ID',
		  status VARCHAR(32) NOT NULL COMMENT 'pending/running/granted/failed',
		  failure_reason VARCHAR(512) NOT NULL DEFAULT '' COMMENT '失败原因',
		  attempt_count INT NOT NULL DEFAULT 0 COMMENT '尝试次数',
		  created_at_ms BIGINT NOT NULL COMMENT '创建时间，UTC epoch ms',
		  updated_at_ms BIGINT NOT NULL COMMENT '更新时间，UTC epoch ms',
		  PRIMARY KEY (app_code, settlement_id),
		  UNIQUE KEY uk_cp_weekly_rank_period_user (app_code, period_start_ms, rank_no, relationship_id, user_id),
		  UNIQUE KEY uk_cp_weekly_rank_wallet_command (app_code, wallet_command_id),
		  KEY idx_cp_weekly_rank_pending (app_code, period_start_ms, period_end_ms, status, updated_at_ms)
		) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CP 周榜发奖事实表'`,
	}
	for _, statement := range statements {
		if _, err := r.db.ExecContext(ctx, statement); err != nil {
			return err
		}
	}
	return nil
}
