# window_info.py
"""
Récupération des informations sur la fenêtre active (X11).

v0 :
- utilise xdotool pour obtenir :
  - le titre de la fenêtre active
  - le PID de la fenêtre active, puis le nom du process via ps

Si quelque chose ne fonctionne pas, on renvoie des valeurs "unknown".
"""

from __future__ import annotations

import subprocess
from typing import Dict, Optional


def _run_cmd(cmd: list[str]) -> Optional[str]:
    """Exécute une commande et renvoie la sortie texte (strippée), ou None en cas d'erreur."""
    try:
        out = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
        return out.decode("utf-8", errors="ignore").strip()
    except Exception:
        return None


def get_active_window_info() -> Dict[str, str]:
    """
    Renvoie un dict :
    {
      "title": "...",
      "app_name": "..."
    }

    Nécessite xdotool installé sur le système.
    """
    title = _run_cmd(["xdotool", "getactivewindow", "getwindowname"])
    pid_str = _run_cmd(["xdotool", "getactivewindow", "getwindowpid"])

    app_name: Optional[str] = None
    if pid_str:
        pid_str = pid_str.strip()
        # On récupère le nom du binaire via ps
        app_name = _run_cmd(["ps", "-p", pid_str, "-o", "comm="])

    if not title:
        title = "unknown_window"
    if not app_name:
        app_name = "unknown_app"

    return {
        "title": title,
        "app_name": app_name,
    }
