import re
from pathlib import Path


def extract_app_ui_body(source_text: str) -> str:
    """
    Extrahiert den HTML-Block aus der alten app_ui()-Funktion.
    """
    match = re.search(r"def app_ui[^(]*\([^)]*\):\s*\n(\s*)return \"\"\"", source_text)
    if not match:
        raise RuntimeError("Konnte def app_ui() mit return \"\"\" nicht finden.")

    indent = match.group(1)
    start = match.end()  # direkt hinter return \"\"\" beginnt der HTML-Code
    close_pattern = "\n" + indent + '"""'
    end = source_text.find(close_pattern, start)

    if end == -1:
        raise RuntimeError("Konnte schließende \"\"\" nicht finden.")

    body = source_text[start:end]
    return body


def build_frontend_studio_file(html_body: str) -> str:
    """
    Baut die vollständige Datei studio.py mit APIRouter + HTML-Block.
    """
    header = (
        "from fastapi import APIRouter\n"
        "from fastapi.responses import HTMLResponse\n\n"
        "router = APIRouter()\n\n\n"
        "@router.get(\"/app\", response_class=HTMLResponse)\n"
        "def app_ui():\n"
        "    return \"\"\""
    )

    footer = "\n    \"\"\"\n"
    return header + html_body + footer


def main():
    backend_dir = Path(__file__).parent

    # 1) Sicherungsdatei bevorzugt
    backup_path = backend_dir / "frontend_app_backup.py"
    if backup_path.exists():
        source_path = backup_path
        print(f"Verwende Sicherungsdatei: {source_path}")
    else:
        # 2) Fallback auf frontend/app.py
        candidate = backend_dir / "frontend" / "app.py"
        if not candidate.exists():
            raise RuntimeError(
                "Keine Quelle gefunden: frontend_app_backup.py oder frontend/app.py fehlen."
            )
        source_path = candidate
        print(f"Verwende Datei: {source_path}")

    source_text = source_path.read_text(encoding="utf-8")
    html_body = extract_app_ui_body(source_text)

    studio_text = build_frontend_studio_file(html_body)

    studio_path = backend_dir / "frontend" / "studio.py"
    studio_path.write_text(studio_text, encoding="utf-8")

    print(f"frontend/studio.py erfolgreich erzeugt: {studio_path}")


if __name__ == "__main__":
    main()

