import type { Artist } from "@/types/artist";
import { ARTIST_SEEDS } from "./artist-bios";

/**
 * 真实艺人数据装配层。
 * 所有人物字段（姓名 / 性别 / 年龄 / 身高 / 性格 / 技能 / 赛道 / 口头禅 /
 * 座右铭 / 长简介）来自《36 位虚拟艺人人物小传.docx》。
 * 立绘 / 三视图 / 氛围图 / solo 视频 来自 public/portraits/ 和 public/videos/artists/。
 *
 * 票数 / 排名是运行时计算（store 投票后会更新）。除此之外不再有任何虚构数据。
 */

/** 没有 solo.mp4 的艺人编号（docx 标注"缺视频"） */
const MISSING_VIDEO: ReadonlySet<string> = new Set(["003", "010", "017", "027"]);

/** 缺氛围图3 的艺人编号（资料文件夹里实际只到氛围图2） */
const MISSING_ATMOSPHERE_3: ReadonlySet<string> = new Set(["036"]);

/** 画廊 = 三张氛围图（1/2/3）。不包含三视图，因为长宽比与卡片不一致。 */
function buildGallery(no: string): string[] {
  const items = [`/portraits/${no}.png`, `/portraits/${no}-2.png`];
  if (!MISSING_ATMOSPHERE_3.has(no)) {
    items.push(`/portraits/${no}-3.png`);
  }
  return items;
}

function buildArtists(): Artist[] {
  return ARTIST_SEEDS.map((seed, idx) => {
    return {
      id: seed.no,
      no: seed.no,
      name: seed.name,
      enName: seed.enName,
      age: seed.age,
      gender: seed.gender,
      bio: seed.bio,
      portrait: `/portraits/${seed.no}.png`,
      avatar: "",
      gallery: buildGallery(seed.no),
      videoUrl: MISSING_VIDEO.has(seed.no)
        ? undefined
        : `/videos/artists/${seed.no}.mp4`,
      // 不设置 poster，由播放器运行时 seek 到 0.001s 渲染首帧作为封面
      videoPoster: "",
      tags: seed.tags,
      height: seed.height,
      // 初始全部 0 票，等用户投票产生真实排名；rank 按 no 顺序兜底
      votes: 0,
      rank: idx + 1,
      motto: seed.motto,
      personality: seed.personality,
      catchphrase: seed.catchphrase,
      skills: seed.skills,
      track: seed.track,
    };
  });
}

export const ARTISTS: Artist[] = buildArtists();

/** 排序方式 · "votes" = 实时排名(票数倒序),"no" = 编号顺序 */
export type SortKey = "votes" | "no";

/** 票数相同时按编号升序兜底，保证排序稳定 */
export function sortArtists(list: Artist[], key: SortKey = "votes"): Artist[] {
  const sorted = [...list];
  if (key === "votes") {
    sorted.sort((a, b) => b.votes - a.votes || a.no.localeCompare(b.no));
  } else {
    sorted.sort((a, b) => a.no.localeCompare(b.no));
  }
  return sorted;
}

/** 按 ID 获取艺人 */
export function getArtist(id: string): Artist | undefined {
  return ARTISTS.find((a) => a.id === id);
}

/** 活动结束时间（mock：当前日期 + 12 天） */
export function getActivityEndTime(): Date {
  const end = new Date();
  end.setDate(end.getDate() + 12);
  end.setHours(end.getHours() + 3);
  end.setMinutes(end.getMinutes() + 24);
  end.setSeconds(end.getSeconds() + 18);
  return end;
}
