#!/usr/bin/env bash
# Backend de ventanas para Wayland (Sway e Hyprland). ventanas.sh delega aqui
# cuando detecta uno de esos compositores.
#
# Por que un fichero aparte y no dentro de ventanas.sh: aquel es X11 puro
# (xdotool, xrandr) y esta probado; mezclar aqui lo romperia. Cada backend en su
# sitio, y este se puede iterar sin tocar el que ya funciona.
#
# En Wayland NO se pueden mover ventanas AJENAS sin permisos del compositor, asi
# que esto actua sobre la ventana ACTIVA (la que tiene el foco), que es lo que
# el compositor si deja hacer. Por eso ignora el <ventana> que si usa el X11.
#
# ── ESTADO ──────────────────────────────────────────────────────────────────
#
# maximiza / restaura / minimiza: confiables (pantalla completa y scratchpad son
#   ordenes de una linea, bien documentadas en los dos compositores).
# izquierda / derecha / centro: escritas de la documentacion, A PROBAR en un
#   equipo real —el flotante y las unidades (ppt, %) varian por version—. Es un
#   primer commit ideal para quien use Sway o Hyprland. Ver ROADMAP.md.
set -uo pipefail

verbo=${1:-}

if command -v swaymsg >/dev/null 2>&1 && swaymsg -t get_version >/dev/null 2>&1; then
    COMP=sway
elif command -v hyprctl >/dev/null 2>&1 && hyprctl version >/dev/null 2>&1; then
    COMP=hypr
else
    echo "no encuentro Sway ni Hyprland en marcha"; exit 1
fi

sway() { swaymsg "$@" >/dev/null 2>&1; }
hypr() { hyprctl dispatch "$@" >/dev/null 2>&1; }

case "$verbo:$COMP" in
    # --- pantalla completa: confiable ---
    maximiza:sway) sway fullscreen enable;  echo "Maximizada, señor" ;;
    maximiza:hypr) hypr fullscreen 1;        echo "Maximizada, señor" ;;
    restaura:sway) sway fullscreen disable;  echo "Restaurada, señor" ;;
    restaura:hypr) hypr fullscreen 0;        echo "Restaurada, señor" ;;
    minimiza:sway) sway move scratchpad;                  echo "Minimizada, señor" ;;
    minimiza:hypr) hypr movetoworkspacesilent special;    echo "Minimizada, señor" ;;

    # --- mitades y centro: A PROBAR (unidades/flotante dependen de la version) ---
    izquierda:sway) sway floating enable; sway resize set width 50 ppt height 100 ppt; sway move absolute position 0 0; echo "A la izquierda, señor" ;;
    derecha:sway)   sway floating enable; sway resize set width 50 ppt height 100 ppt; sway move absolute position 50 ppt 0; echo "A la derecha, señor" ;;
    centro:sway)    sway floating enable; sway resize set width 70 ppt height 80 ppt;  sway move absolute position center; echo "Al centro, señor" ;;
    izquierda:hypr) hypr setfloating; hypr resizeactive exact 50% 100%; hypr moveactive exact 0 0; echo "A la izquierda, señor" ;;
    derecha:hypr)   hypr setfloating; hypr resizeactive exact 50% 100%; hypr moveactive exact 50% 0; echo "A la derecha, señor" ;;
    centro:hypr)    hypr setfloating; hypr resizeactive exact 70% 80%;  hypr centerwindow; echo "Al centro, señor" ;;

    *)
        echo "en $COMP todavia no esta esa orden de ventanas. Implementadas:" \
             "maximiza, restaura, minimiza, izquierda, derecha, centro." \
             "Las demas (mover entre pantallas, escritorios) estan en el roadmap."
        exit 1 ;;
esac
