"""_extract_templates.py — Maintainer-Helfer, der die HTML-Bodies aller
Templates pro Aspect-Ratio in einzelne .html-Files unter templates/16x9/
bzw. templates/4x5/ extrahiert.

Aufruf einmalig beim Bundle-Build:

    python -m _lib.designsystem._extract_templates

Liefert eine Sammlung von Referenz-Snippets pro Template-ID. Die Files
sind Reine HTML-Bodies (ohne <html>/<head>/<body>-Shell), mit folgenden
Platzhaltern:

    {{PHOTO_URL}}   — Pfad oder Data-URI zur Foto-Quelle
    {{HEADLINE}}    — Headline-Text
    {{EYEBROW}}     — Eyebrow-Text (Template-Default greift, wenn leer)

Logo wird nicht eingebaut (Stefan-Lock-Generalisierung): die Extraktion
läuft mit logo=False. Wer Logo will, ruft die Funktion direkt auf.
"""
from __future__ import annotations

import sys
from pathlib import Path

from _lib.designsystem import compose, compose_v
from _lib.designsystem.compose import set_logo_path

HERE = Path(__file__).resolve().parent
DIR_16X9 = HERE / "templates" / "16x9"
DIR_4X5 = HERE / "templates" / "4x5"


def _generate(module, target_dir: Path) -> int:
    target_dir.mkdir(parents=True, exist_ok=True)
    count = 0
    for tid, fn in module.TEMPLATES.items():
        body = fn("{{PHOTO_URL}}", "{{HEADLINE}}", "{{EYEBROW}}", False)
        # Wir geben ein Mini-HTML-Dokument aus, damit das Snippet eigenständig
        # in Browsern öffenbar ist (zu Demo-Zwecken). Der Body ist der echte
        # Render-Output mit absoluten Inline-Styles und Token-Werten.
        html = (
            f"<!-- Template {tid} ({module.TEMPLATE_NAMES.get(tid, '')}) -->\n"
            f"<!-- Extrahiert aus {module.__name__} via _extract_templates.py -->\n"
            f"<!-- Platzhalter: {{{{PHOTO_URL}}}}, {{{{HEADLINE}}}}, {{{{EYEBROW}}}} -->\n"
            f'<div style="position:relative;width:{module.WIDTH}px;height:{module.HEIGHT}px;overflow:hidden;background:#18273A;">\n'
            f"{body.strip()}\n"
            f"</div>\n"
        )
        (target_dir / f"{tid}.html").write_text(html, encoding="utf-8")
        count += 1
    return count


def main() -> int:
    set_logo_path(None)  # Logo-frei für Extraktion
    n_16x9 = _generate(compose, DIR_16X9)
    n_4x5 = _generate(compose_v, DIR_4X5)
    print(f"OK: 16x9 = {n_16x9} Files, 4x5 = {n_4x5} Files")
    return 0


if __name__ == "__main__":
    sys.exit(main())
