#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""扫描 images/ 生成人物设定图画廊 report.html"""
import base64
import json
import os

OUT = os.path.dirname(os.path.abspath(__file__))
IMG_DIR = os.path.join(OUT, "images")

manifest = json.load(open(os.path.join(OUT, "人物出图清单.json"), encoding="utf-8"))
name2meta = {m["name"]: m for m in manifest}

cards = []
for fn in sorted(os.listdir(IMG_DIR)):
    if not fn.endswith(".png"):
        continue
    name = fn.replace("-sheet.png", "")
    meta = name2meta.get(name, {})
    b64 = base64.b64encode(open(os.path.join(IMG_DIR, fn), "rb").read()).decode()
    cards.append(
        f'<div class="card"><img src="data:image/png;base64,{b64}" alt="{name}">'
        f'<div class="cap"><b>{name}</b><span class="tier">{meta.get("importance","")}</span>'
        f'<p>{meta.get("oneLiner","")}</p></div></div>'
    )

html = f"""<!DOCTYPE html>
<html lang="zh"><head><meta charset="utf-8">
<title>《凡骨问长生》人物设定图（{len(cards)} 张）</title>
<style>
 body{{margin:0;background:#14100c;color:#eee;font-family:"PingFang SC","Microsoft YaHei",sans-serif;}}
 h1{{text-align:center;padding:28px 16px 4px;font-size:22px;letter-spacing:2px;}}
 .sub{{text-align:center;color:#9a8f7f;font-size:13px;margin-bottom:18px;}}
 .grid{{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:18px;padding:0 20px 40px;}}
 .card{{background:#1e1812;border:1px solid #33291d;border-radius:10px;overflow:hidden;}}
 .card img{{width:100%;display:block;}}
 .cap{{padding:10px 14px;}}
 .cap b{{font-size:16px;}}
 .tier{{float:right;font-size:12px;color:#c9a86a;border:1px solid #c9a86a55;border-radius:20px;padding:1px 10px;}}
 .cap p{{margin:6px 0 0;color:#b5a894;font-size:12px;line-height:1.6;}}
</style></head><body>
<h1>《凡骨问长生》人物设定图</h1>
<div class="sub">Agnes 出图 · 半写实厚涂 · 16:9 设定图（左半身像 + 三视图 + 细节条）· 共 {len(cards)} 张</div>
<div class="grid">{''.join(cards)}</div>
</body></html>"""

with open(os.path.join(OUT, "report.html"), "w", encoding="utf-8") as f:
    f.write(html)
print(f"report.html 已生成：{len(cards)} 张图")
