// Mock data + state helpers

// Sample subtitle cues — meaningful Korean lyrics that work for scene design
const SONG_1_CUES = [
  { start: 0.0, end: 3.2, text: "도시의 불빛이 하나둘씩 켜지고" },
  { start: 3.2, end: 6.8, text: "나는 혼자 창가에 서 있어" },
  { start: 7.4, end: 11.0, text: "오래된 커피잔이 식어가는 동안" },
  { start: 11.4, end: 14.8, text: "시간은 천천히 흐르고 있어" },
  { start: 15.6, end: 19.2, text: "밤하늘의 별들이 속삭이네" },
  { start: 19.6, end: 23.0, text: "우리 다시 만날 수 있을까" },
  { start: 24.0, end: 28.2, text: "바람이 불어오는 이 순간에" },
  { start: 28.6, end: 32.4, text: "너의 이름을 불러본다" },
  { start: 33.2, end: 37.0, text: "멀어져 가는 기차의 소리" },
  { start: 37.4, end: 41.2, text: "잊혀진 약속들이 돌아와" },
  { start: 42.0, end: 45.8, text: "새벽이 오기 전에" },
  { start: 46.2, end: 50.0, text: "한 번만 더 너를 보고 싶어" },
];

const SONG_2_CUES = [
  { start: 0.0, end: 3.4, text: "여름밤의 해변에서 춤을 춰요" },
  { start: 3.8, end: 7.2, text: "파도 소리가 리듬을 만들어" },
  { start: 7.8, end: 11.4, text: "네온사인이 물결에 비치고" },
  { start: 12.0, end: 15.6, text: "우린 영원히 이대로" },
  { start: 16.4, end: 20.0, text: "별빛 아래 손을 잡고" },
  { start: 20.4, end: 23.8, text: "모래 위에 발자국 남기며" },
  { start: 24.6, end: 28.4, text: "아무 말도 필요 없어" },
  { start: 28.8, end: 32.6, text: "이 순간이면 충분해" },
];

const SONG_3_CUES = [
  { start: 0.0, end: 3.2, text: "겨울 숲속을 걸어가" },
  { start: 3.6, end: 7.0, text: "눈 밟는 소리만 들려와" },
  { start: 7.6, end: 11.2, text: "하얀 입김이 공기에 퍼지고" },
  { start: 11.6, end: 15.0, text: "나무들은 깊이 잠들어 있어" },
  { start: 16.0, end: 20.0, text: "고요한 시간 속에서" },
  { start: 20.4, end: 24.2, text: "마음이 맑아져 간다" },
];

// Scene prompts — AI-generated-looking creative directions
const scenePrompts = {
  s1: [
    "도시 야경, 창가에 서 있는 실루엣, 노랗고 따뜻한 창문 불빛, 영화적 조명",
    "창가에 기대어 밖을 바라보는 뒷모습, 푸르스름한 밤 그림자, 35mm 필름 느낌",
    "테이블 위 김이 사라진 커피잔, 얕은 심도, 시네마틱 부드러운 조명",
    "벽시계의 초침 클로즈업, 흐릿한 배경, 명상적인 분위기",
    "별이 가득한 밤하늘, 은하수, 고요한 산 능선 실루엣",
    "밤하늘 아래 둘이 걷던 거리, 빈자리, 노스탤지어",
    "흐트러진 머릿결과 커튼, 얇은 바람의 흔적, 부드러운 역광",
    "손글씨로 쓰인 이름, 오래된 편지지, 따뜻한 램프 빛",
    "비 내리는 창밖, 멀어져 가는 열차 미등, 붉은 빛의 궤적",
    "탁자 위 펼쳐진 오래된 사진들, 바랜 색감, 그리운 톤",
    "새벽녘 안개 낀 골목, 푸른 새벽 빛, 가로등이 꺼지기 직전",
    "거울 속의 눈, 눈물 한 방울, 섬세한 클로즈업",
  ],
  s2: [
    "열대 해변의 밤, 모닥불, 춤추는 실루엣들, 활기찬 분위기",
    "파도가 해변에 부서지는 순간, 달빛 반사, 슬로우 모션",
    "네온 간판 불빛, 물결에 일렁이는 반사, 마이애미 바이스 감성",
    "별 아래 두 손을 맞잡은 커플, 수평선 배경, 로맨틱",
    "반짝이는 별무리, 맞잡은 손의 실루엣, 꿈결 같은 느낌",
    "모래에 남겨진 발자국, 밀려오는 파도, 사라지는 흔적",
    "바다를 보며 침묵하는 두 사람, 황혼의 마지막 빛",
    "수평선 위로 떠오르는 달, 고요한 물결, 평화로운 종결",
  ],
  s3: [
    "눈 덮인 침엽수림 오솔길, 푸른 새벽빛, 고요한 분위기",
    "부츠가 눈을 밟는 클로즈업, 뽀드득 소리가 들릴 것 같은",
    "차가운 공기 중에 퍼지는 입김, 역광, 미세한 디테일",
    "서리로 덮인 나뭇가지, 부드러운 안개, 흑백에 가까운 톤",
    "눈밭에 남은 발자국 하나, 부드러운 그림자, 미니멀",
    "맑은 하늘이 보이는 숲 틈새, 빛줄기가 내려오는 순간",
  ],
};

// initial album state — seeded with 3 sample songs at varying states
const makeId = () => Math.random().toString(36).slice(2, 9);

const buildScenes = (cues, promptsOrOptions = []) => {
  const options = Array.isArray(promptsOrOptions)
    ? { prompts: promptsOrOptions }
    : (promptsOrOptions || {});
  const prompts = Array.isArray(options.prompts) ? options.prompts : [];

  return cues.map((c, i) => ({
    id: makeId(),
    start: c.start,
    end: c.end,
    text: c.text,
    sentenceId: c.sentenceId || c.id || "",
    chapterNumber: i + 1,
    prompt: prompts.length ? prompts[i % prompts.length] : "",
    legacyPrompt: prompts.length ? prompts[i % prompts.length] : "",
    promptEn: "",
    promptSource: prompts.length ? "legacy" : "pending",
    analysisStatus: "idle",
    analysisError: "",
    imageStatus: "idle",
    imageError: "",
    imageUrl: "",
    imageFilename: "",
    imageSavedAt: "",
    imageSource: "",
    imageProvider: "",
    googleImagePrompt: "",
    imageSeed: Math.floor(Math.random() * 1000), // fallback placeholder seed
    palette: i, // index into palette array
  }));
};

const INITIAL_ALBUM = {
  title: "밤의 편지",
  artist: "윤하린",
  year: 2026,
  cover: "auto", // rendered
  songs: [
    {
      id: "song-1",
      title: "창가에 혼자",
      filename: "01_창가에_혼자.mp3",
      duration: 52.0,
      size: "4.8 MB",
      status: "ready",
      cues: SONG_1_CUES,
      scenes: buildScenes(SONG_1_CUES, scenePrompts.s1),
      paletteName: "midnight-violet",
    },
    {
      id: "song-2",
      title: "여름밤의 춤",
      filename: "02_여름밤의_춤.mp3",
      duration: 34.0,
      size: "3.2 MB",
      status: "ready",
      cues: SONG_2_CUES,
      scenes: buildScenes(SONG_2_CUES, scenePrompts.s2),
      paletteName: "neon-wave",
    },
    {
      id: "song-3",
      title: "겨울 숲",
      filename: "03_겨울_숲.mp3",
      duration: 26.0,
      size: "2.6 MB",
      status: "draft",
      cues: SONG_3_CUES,
      scenes: buildScenes(SONG_3_CUES, scenePrompts.s3),
      paletteName: "winter-steel",
    },
  ],
};

// palettes map by name
const PALETTES = {
  "midnight-violet": ["oklch(45% 0.18 300)", "oklch(35% 0.15 250)", "oklch(50% 0.18 320)", "oklch(30% 0.12 280)"],
  "neon-wave":       ["oklch(65% 0.20 200)", "oklch(55% 0.22 330)", "oklch(70% 0.18 80)",  "oklch(40% 0.15 250)"],
  "winter-steel":    ["oklch(78% 0.04 240)", "oklch(65% 0.06 220)", "oklch(85% 0.02 200)", "oklch(55% 0.05 240)"],
  "amber-dusk":      ["oklch(60% 0.16 60)", "oklch(45% 0.18 30)", "oklch(70% 0.14 80)", "oklch(50% 0.12 20)"],
  "forest-green":    ["oklch(55% 0.14 155)", "oklch(42% 0.12 180)", "oklch(65% 0.16 135)", "oklch(38% 0.10 170)"],
};

// Utility: time formatting
const fmtTime = (s) => {
  const m = Math.floor(s / 60);
  const ss = Math.floor(s % 60).toString().padStart(2, "0");
  return `${m}:${ss}`;
};
const fmtTimeMs = (s) => {
  const m = Math.floor(s / 60).toString().padStart(2, "0");
  const ss = Math.floor(s % 60).toString().padStart(2, "0");
  const ms = Math.floor((s % 1) * 1000).toString().padStart(3, "0");
  return `${m}:${ss}.${ms}`;
};

Object.assign(window, {
  INITIAL_ALBUM, PALETTES, buildScenes, scenePrompts, fmtTime, fmtTimeMs, makeId,
  SONG_1_CUES, SONG_2_CUES, SONG_3_CUES,
});
