"""
Vuelca en un solo .txt los PROMPTS de las imagenes que hay en
Output/test_blocks/<pool>/REVISAR PROMPT/, cada uno precedido por el nombre
del PNG al que corresponde.

Solo usa el manifest de la corrida --all (el que tiene las N imagenes del pool),
NO los manifests viejos: esos son de corridas anteriores con otro prompt (con
'age up' etc) y no corresponden a lo que estas revisando.

    python Engine/dump_pendientes.py                    # explicit por defecto
    python Engine/dump_pendientes.py --pool spicy
"""
import argparse
import json
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent
TEST_BLOCKS = BASE_DIR / "Output" / "test_blocks"
VERDICT_DIRS = ("REVISAR PROMPT",)


def latest_batch_manifest(pool):
    """El manifest con MAS imagenes del pool -> la corrida --all."""
    best = None
    for m in (TEST_BLOCKS / pool).rglob("manifest_*.json"):
        try:
            data = json.loads(m.read_text(encoding="utf-8-sig"))
        except Exception:
            continue
        if best is None or len(data) > len(best[1]):
            best = (m, data)
    return best


def main():
    p = argparse.ArgumentParser(description="Volcado de prompts de REVISAR PROMPT")
    p.add_argument("--pool", default="explicit")
    args = p.parse_args()

    pool_dir = TEST_BLOCKS / args.pool
    # los PNG que hay que revisar ahora mismo
    pngs = set()
    for vd in VERDICT_DIRS:
        for f in (pool_dir / vd).glob("*.png"):
            pngs.add(f.name)
    if not pngs:
        print(f"[!] No hay PNGs en {[str(pool_dir / v) for v in VERDICT_DIRS]}")
        return

    got = latest_batch_manifest(args.pool)
    if not got:
        print(f"[!] No hay manifest en {pool_dir}")
        return
    mpath, data = got
    print(f"[-] manifest: {mpath.relative_to(BASE_DIR)} ({len(data)} imagenes)")
    print(f"[-] {len(pngs)} PNGs en {VERDICT_DIRS[0]}")

    by_file = {e.get("file", ""): e for e in data}
    rows = []
    missing = []
    for png in sorted(pngs):
        e = by_file.get(png)
        if not e:
            missing.append(png)
            continue
        rows.append((png, e.get("char", ""), e.get("prompt", "")))

    out = pool_dir / VERDICT_DIRS[0] / "prompts_pendientes.txt"
    lines = [
        f"# PROMPTS de las imagenes en {args.pool}/{VERDICT_DIRS[0]}/",
        f"# {len(rows)} prompts (de {len(pngs)} PNGs)",
        "# prompt exacto con el que se genero cada imagen, sin 'age up'.",
        "# formato: <nombre del png>:\\n\\n<prompt>\\n",
        "",
    ]
    for png, char, prompt in rows:
        lines.append(f"{png}:")
        lines.append("")
        lines.append(prompt)
        lines.append("")
        lines.append("-" * 78)
        lines.append("")
    out.write_text("\n".join(lines), encoding="utf-8")

    print(f"\n[OK] {out.relative_to(BASE_DIR)}")
    for png, char, _ in rows:
        print(f"    {png}  ({char})")
    if missing:
        print(f"\n[!] {len(missing)} PNG sin prompt en ese manifest:")
        for m in missing:
            print(f"    {m}")


if __name__ == "__main__":
    main()