#!/bin/sh
# Bascule entre les deux modes d'affichage de Waydroid. Il faut choisir : aucun
# reglage ne donne les deux (mesure du 31/07/2026, cf. README-waydroid.md).
#
#   video       -> persist.waydroid.multi_windows=false
#                  Une SEULE fenetre Android. La video s'affiche.
#                  Mesure : 0 calque en composition Overlay, tout en CLIENT.
#   integration -> persist.waydroid.multi_windows=true
#                  Une fenetre Wayland par appli Android (integration Plasma).
#                  Mesure : 2 calques en Overlay -> le tampon YV12 part vers KWin
#                  avec la disposition du repli 1D de minigbm -> RECTANGLE VERT.
#
# ☠️ Pourquoi ce script et pas juste une ligne dans waydroid_base.prop : les
# proprietes `persist.*` sont stockees par Android dans /data et PRIMENT sur
# base.prop. Mesure : base.prop=true alors que getprop rendait false. Il faut donc
# ecrire la propriete DANS le conteneur (setprop la persiste aussitot dans /data),
# et tenir base.prop en accord pour le cas d'un /data neuf.
set -eu

STATE=/var/lib/waydroid/joyeuse-video-mode
PROP=persist.waydroid.multi_windows

usage() {
	cat <<'EOF'
Usage : joyeuse-waydroid-video {video|integration|status}

  video        la video s'affiche  (fenetre Android unique)
  integration  une fenetre par appli (defaut) — mais AUCUNE video
  status       affiche le mode courant

Alias acceptes : on = video, off = integration.
EOF
}

current_mode() {
	[ -f "$STATE" ] && cat "$STATE" || echo integration
}

case "${1:-status}" in
	status)
		echo "mode demande      : $(current_mode)"
		if waydroid status 2>/dev/null | grep -q "Container:.*RUNNING"; then
			echo "$PROP  : $(waydroid shell -- getprop $PROP 2>/dev/null)"
			n=$(waydroid shell -- dumpsys SurfaceFlinger 2>/dev/null | grep -c "Composition: Overlay" || true)
			echo "calques en Overlay: ${n:-?}   (0 = la video s'affiche)"
		else
			echo "(conteneur arrete : etat effectif non mesurable)"
		fi
		exit 0
		;;
	video|on)          MODE=video;       VAL=false ;;
	integration|off)   MODE=integration; VAL=true  ;;
	-h|--help|help)    usage; exit 0 ;;
	*)                 usage; exit 1 ;;
esac

[ "$(id -u)" = 0 ] || { echo "Il faut etre root (sudo)." >&2; exit 1; }

# 1. Etat cote hote : lu par joyeuse-waydroid-props.sh, qui met base.prop en accord
#    avant chaque demarrage du conteneur (utile si /data est reinitialise).
mkdir -p "${STATE%/*}"
printf '%s\n' "$MODE" >"$STATE"

# 2. La valeur qui compte vraiment vit dans /data : il faut passer par le conteneur.
# ☠️ NE PAS tester "Container: RUNNING" : Waydroid met le conteneur en FROZEN
#    des qu'il est au repos, et un conteneur FROZEN accepte parfaitement un
#    setprop (verifie le 31/07). Le test sur RUNNING faisait donc prendre la
#    branche "arrete" a un conteneur bien vivant : seul base.prop etait ecrit,
#    /data gardait l'ancienne valeur et la faisait gagner au demarrage suivant.
#    Symptome : l'interrupteur annonçait "mode video" et la video restait VERTE.
# ➜ On ne lit plus un ETAT, on verifie l'EFFET : on tente, puis on relit.
if waydroid shell -- setprop "$PROP" "$VAL" 2>/dev/null &&
   [ "$(waydroid shell -- getprop "$PROP" 2>/dev/null | tr -d '\r')" = "$VAL" ]; then
	echo "$PROP = $VAL  (applique dans le conteneur)"
else
	cat >&2 <<EOF
⚠️  Le conteneur n'a pas pris le reglage : seul base.prop a ete mis a jour.
    ☠️ Si /data contient deja une valeur pour $PROP, elle PRIMERA et ce
    changement n'aura AUCUN effet -- la video restera verte en mode video.
    Relance cette commande une fois Waydroid demarre.
EOF
fi

# 3. Le hwcomposer ne lit la propriete qu'a son initialisation.
echo "Redemarrage du conteneur Waydroid…"
systemctl restart waydroid-container.service || true

cat <<EOF

Mode « $MODE » demande.
➜ La session s'est arretee : tape une icone Waydroid/Android dans le lanceur
  Plasma pour la relancer (elle ne doit pas etre lancee par SSH).
EOF
