"""Subprocess-Runner: suspendet die TUI und führt Befehle interaktiv aus.

So kann pacman/paru/sudo seinen eigenen Passwort-Prompt + Progress
direkt im Terminal anzeigen, ohne dass wir parsen müssen.
"""
from __future__ import annotations

import subprocess
from dataclasses import dataclass

from textual.app import App


@dataclass
class Command:
    label: str
    argv: list[str]


def run_interactive(app: App, commands: list[Command]) -> list[int]:
    """Suspendet die App, führt jeden Befehl nacheinander aus, kehrt zurück.

    Returns: liste der exit codes (in Reihenfolge der Befehle).
    """
    codes: list[int] = []
    with app.suspend():
        print("\n" + "═" * 64)
        print(f"  TANINUX — {len(commands)} befehl(e)")
        print("═" * 64)
        for cmd in commands:
            print()
            print(f"┌── {cmd.label} " + "─" * max(0, 56 - len(cmd.label)))
            print(f"│  $ {' '.join(cmd.argv)}")
            print("└" + "─" * 63)
            try:
                rc = subprocess.run(cmd.argv, check=False).returncode
            except KeyboardInterrupt:
                print("\n[abgebrochen]")
                codes.append(130)
                break
            except FileNotFoundError as e:
                print(f"[fehler: {e}]")
                rc = 127
            codes.append(rc)
        print()
        print("═" * 64)
        try:
            input("  ENTER zum zurück zu TANINUX … ")
        except (EOFError, KeyboardInterrupt):
            pass
    return codes
