#!/usr/bin/env python3
# FWS — menu d'alimentation (verrouiller / déconnexion / suspendre /
# redémarrer / éteindre). Bouton de la barre ou Super+X. Universel :
#   • Hyprland (Wayland) → wofi, verrouillage hyprlock, sortie hyprctl.
#   • i3 (X11)           → rofi, verrouillage i3lock, sortie i3-msg exit.
# Aucune dépendance hors python3 + wofi/rofi (déjà là avec le bureau).

import os
import subprocess
import sys

_WOFI_STYLE = "/usr/local/share/fws/wofi-style.css"
_HYPR = bool(os.environ.get("HYPRLAND_INSTANCE_SIGNATURE"))

# (libellé affiché, commande shell). L'icône Nerd Font aide au repérage.
if _HYPR:
    _lock = "hyprlock"
    _logout = "hyprctl dispatch exit"
else:
    _lock = "i3lock -c 1e1e2e"
    _logout = "i3-msg exit"

_ITEMS = [
    ("󰌾  Verrouiller", _lock),
    ("󰗽  Déconnexion", _logout),
    ("󰤄  Suspendre", "systemctl suspend"),
    ("󰜉  Redémarrer", "systemctl reboot"),
    ("󰐥  Éteindre", "systemctl poweroff"),
]


def _menu(entries):
    text = "\n".join(entries)
    if _HYPR:
        cmd = ["wofi", "--dmenu", "--prompt", "Alimentation",
               "--width", "300", "--height", "260", "--cache-file", "/dev/null"]
        if os.path.exists(_WOFI_STYLE):
            cmd += ["--style", _WOFI_STYLE]
    else:
        cmd = ["rofi", "-dmenu", "-i", "-p", "Alimentation", "-no-custom",
               "-theme-str", "window { width: 300px; } listview { lines: 5; }"]
    out = subprocess.run(cmd, input=text, text=True,
                         capture_output=True, check=False)
    return out.stdout.strip()


def main():
    choice = _menu([label for label, _ in _ITEMS])
    if not choice:
        return 0
    for label, command in _ITEMS:
        if label == choice:
            subprocess.Popen(["sh", "-c", command])  # noqa: S603,S607
            break
    return 0


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