/**
 * Prisma 种子脚本 · 把 36 位真实艺人 + 活动配置写入 DB
 *
 * 数据来源：src/lib/artist-bios.ts (从《36 位虚拟艺人人物小传.docx》提取)
 * 这份文件同时是前端 SSG 的静态源 + DB 的 seed 源,双写但单一来源,
 * 改人物字段时只需要改 artist-bios.ts,然后重跑 seed。
 *
 * 运行：pnpm db:seed
 *
 * 注意：portrait / videoUrl 等 TOS URL 不写入 DB —— 前端从 NEXT_PUBLIC_TOS_DOMAIN
 * 自动拼接,DB 字段保留为 NULL (灵活度高,换桶不需要重跑 seed)。
 */

import { PrismaClient, Prisma } from "@prisma/client";
import { ARTIST_SEEDS } from "../src/lib/artist-bios";

const prisma = new PrismaClient();

async function main() {
  console.log("🌱 开始 seed 数据库...");

  // 1. 活动配置 (upsert: 第一次创建, 后续仅延长 endAt)
  const now = new Date();
  const endAt = new Date(now);
  endAt.setDate(endAt.getDate() + 30); // 默认活动期 30 天

  await prisma.activityConfig.upsert({
    where: { id: 1 },
    create: {
      id: 1,
      startAt: now,
      endAt,
      voteEnabled: true,
      dailyQuota: 10,
      perArtistLimit: 0, // 不限单艺人
      paidVoteEnabled: false,
    },
    update: {
      endAt,
      voteEnabled: true,
      dailyQuota: 10,
      perArtistLimit: 0,
    },
  });
  console.log("  ✓ 活动配置已写入 (dailyQuota=10, voteEnabled=true)");

  // 2. 36 位艺人 (upsert: 若 DB 里有旧 seed 的假数据, 覆盖为真实姓名/简介)
  let created = 0;
  let updated = 0;
  for (const seed of ARTIST_SEEDS) {
    const existing = await prisma.artist.findUnique({ where: { id: seed.no } });

    const data = {
      no: seed.no,
      name: seed.name,
      enName: seed.enName,
      bio: seed.bio,
      height: seed.height,
      age: seed.age,
      gender: seed.gender,
      motto: seed.motto ?? null,
      personality: seed.personality ?? null,
      catchphrase: seed.catchphrase ?? null,
      skills: seed.skills ?? null,
      track: seed.track ?? null,
      tags: seed.tags as unknown as Prisma.InputJsonValue,
    };

    if (existing) {
      await prisma.artist.update({
        where: { id: seed.no },
        data,
      });
      updated++;
    } else {
      await prisma.artist.create({
        data: {
          id: seed.no,
          ...data,
          status: "ACTIVE",
          voteCount: 0,
          currentRank: parseInt(seed.no, 10),
        },
      });
      created++;
    }
  }
  console.log(
    `  ✓ 36 人 seed 完成 (新建 ${created}, 更新 ${updated})`,
  );

  // 3. 报告 DB 当前状态
  const stats = {
    artists: await prisma.artist.count({ where: { status: "ACTIVE" } }),
    users: await prisma.user.count(),
    votes: await prisma.vote.count(),
    config: await prisma.activityConfig.count(),
  };
  console.log("📊 DB 当前状态:", stats);
  console.log("✅ Seed 完成");
}

main()
  .catch((e) => {
    console.error("❌ Seed 失败：", e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });
