#!/usr/bin/env python3
import shutil
from pathlib import Path

GENERATED_BANNER = """\
<!-- ═══════════════════════════════════════════════════════════════════
     AUTO-GENERATED — NICHT MANUELL BEARBEITEN!
     Quellen: presentation-src/ (head.html, slides/*.html, foot.html)
     Styles:  presentation-src/presentation.css
     Build:   python3 scripts/build_praesentation.py   oder   python3 dev.py
     ═══════════════════════════════════════════════════════════════════ -->
"""


def main() -> None:
    project_root = Path(__file__).resolve().parent.parent
    src_root = project_root / "presentation-src"
    slides_dir = src_root / "slides"
    output_file = project_root / "praesentation.html"
    css_src = src_root / "presentation.css"
    css_dest_dir = project_root / "css"
    css_dest = css_dest_dir / "presentation.css"

    if not css_src.exists():
        raise SystemExit(f"Fehlende Quelldatei: {css_src.relative_to(project_root)}")

    css_dest_dir.mkdir(exist_ok=True)
    shutil.copy2(css_src, css_dest)

    parts = [src_root / "head.html"]
    parts.extend(sorted(slides_dir.glob("*.html")))
    parts.append(src_root / "foot.html")

    missing = [path for path in parts if not path.exists()]
    if missing:
        missing_text = "\n".join(f"- {path.relative_to(project_root)}" for path in missing)
        raise SystemExit(f"Fehlende Quelldateien:\n{missing_text}")

    slide_files = sorted(slides_dir.glob("*.html"))

    content = [GENERATED_BANNER]
    for path in parts:
        text = path.read_text(encoding="utf-8")
        if not text.endswith("\n"):
            text += "\n"
        content.append(text)

    built = "".join(content)
    if output_file.exists() and output_file.read_text(encoding="utf-8") == built:
        print(
            "Build: keine Änderungen — "
            f"{output_file.relative_to(project_root)} ist aktuell."
        )
        return

    output_file.write_text(built, encoding="utf-8")

    slide_names = ", ".join(path.name for path in slide_files)
    print(
        "Build erfolgreich: "
        f"{output_file.relative_to(project_root)} erzeugt "
        f"aus {len(parts)} Teilen ({len(slide_files)} Slide-Dateien)."
    )
    print(f"  Reihenfolge: {slide_names}")


if __name__ == "__main__":
    main()
