# 构建脚本：扫描 data/songs/*.json，生成网页直接加载的 assets/data.js
# 单一数据源 = data/songs/ 下各歌曲 JSON；产物 assets/data.js 为中间生成文件，请勿手改。
#
# 新增一首歌：
#   1) cp templates/song.template.json data/songs/<id>.json
#   2) 按字段填好（meta.id 必须与文件名一致）
#   3) python3 build_data.py
#   首页会自动出现这首歌的卡片。
import json, os, glob

ROOT = os.path.dirname(os.path.abspath(__file__))
songs_dir = os.path.join(ROOT, "data", "songs")
out_path = os.path.join(ROOT, "assets", "data.js")

paths = sorted(glob.glob(os.path.join(songs_dir, "*.json")))
songs = {}
index = []
for p in paths:
    with open(p, "r", encoding="utf-8") as f:
        d = json.load(f)
    meta = d.get("meta", {})
    sid = meta.get("id") or os.path.splitext(os.path.basename(p))[0]
    d["meta"]["id"] = sid
    songs[sid] = d
    index.append({
        "id": sid,
        "title": meta.get("title", ""),
        "title_zh": meta.get("title_zh", ""),
        "artist": meta.get("artist", ""),
        "album": meta.get("album", ""),
        "language": meta.get("language", ""),
        "emoji": meta.get("emoji", "🎵"),
        "theme": meta.get("theme", "rose"),
        "tagline": meta.get("tagline", ""),
        "summary": meta.get("summary", ""),
        "lines": len(d.get("lines", [])),
    })

js = "// 本文件由 build_data.py 自动生成，请勿手改。\n"
js += "window.SONGS = " + json.dumps(songs, ensure_ascii=False, indent=2) + ";\n"
js += "window.SONG_INDEX = " + json.dumps(index, ensure_ascii=False, indent=2) + ";\n"

with open(out_path, "w", encoding="utf-8") as f:
    f.write(js)

print("OK ->", out_path, "(", os.path.getsize(out_path), "bytes )  songs:", len(songs))
