#!/bin/sh
# p2i-test-assistance — vérifie que l'assistance à distance (P2i Assistance ou
# RustDesk) peut fonctionner dans la session en cours, puis ouvre l'outil.
# Le compte rendu est aussi enregistré dans ~/p2i-test-assistance.txt.

rapport="$HOME/p2i-test-assistance.txt"
: > "$rapport"
dire() { printf '%s\n' "$*" | tee -a "$rapport"; }
ok()   { dire "  [ OK ]  $*"; }
ko()   { dire "  [ !! ]  $*"; pb=$((pb + 1)); }
pb=0

dire "Test de l'assistance à distance — $(date '+%d/%m/%Y %H:%M')"
dire "Système : $(. /etc/os-release; echo "$PRETTY_NAME")   Profil : $(p2i-profil 2>/dev/null || echo inconnu)"
dire "Session : ${XDG_CURRENT_DESKTOP:-?} (${XDG_SESSION_TYPE:-?}), compositeur : $(labwc --version 2>/dev/null | head -1 || echo '?')"
dire ""
dire "1. Ce dont l'outil a besoin pour voir l'écran"

if [ -n "${WAYLAND_DISPLAY:-}" ]; then ok "session Wayland ($WAYLAND_DISPLAY)"; else ko "pas de session Wayland"; fi

for s in pipewire wireplumber; do
    if systemctl --user is-active --quiet "$s"; then ok "service $s actif"
    else ko "service $s inactif"; fi
done

# Essai réel : demande un partage d'écran comme le ferait l'outil d'assistance
if res="$(/usr/libexec/p2i/test-capture 2>&1)"; then
    printf '%s\n' "$res" | while IFS= read -r l; do ok "$l"; done
else
    ko "partage d'écran impossible — $res"
fi
if gdbus introspect --session --dest org.freedesktop.portal.Desktop \
        --object-path /org/freedesktop/portal/desktop 2>/dev/null \
        | grep -q 'org.freedesktop.portal.RemoteDesktop'; then
    ok "portail de prise en main (clavier, souris) disponible"
else
    dire "  [ -- ]  pas de portail de prise en main : l'outil passera par son service (uinput)"
fi

dire ""
dire "2. Outil d'assistance"
if ! infos="$(/usr/libexec/p2i/assistance-outil)"; then
    ko "aucun outil d'assistance installé (profil « Poste personnel » ?) : sudo p2i-profil client"
    dire ""; dire "Compte rendu enregistré dans $rapport"
    [ "${1:-}" = "--attendre" ] && { printf '\nAppuyez sur Entrée pour fermer cette fenêtre. '; read -r _; }
    exit 1
fi
outil="$(printf '%s\n' "$infos" | sed -n 2p)"
service="$(printf '%s\n' "$infos" | sed -n 3p)"
nom="$(printf '%s\n' "$infos" | sed -n 4p)"
ok "$nom $("$outil" --version 2>/dev/null | tail -1)"
if systemctl is-active --quiet "$service"; then
    ok "service $nom actif"
else
    dire "  [ -- ]  service $nom arrêté : démarrage (mot de passe administrateur possible)"
    if sudo systemctl start "$service"; then ok "service $nom démarré"
    else ko "le service $nom n'a pas démarré"; fi
fi
sleep 3
id="$("$outil" --get-id 2>/dev/null | tail -1)"
if [ -n "$id" ]; then ok "identifiant de ce poste : $id"; else ko "identifiant introuvable"; fi

dire ""
if [ "$pb" -eq 0 ]; then dire "Tout est en place côté poste."
else dire "$pb point(s) à corriger ci-dessus."; fi
dire ""
dire "3. À essayer depuis un autre ordinateur ($nom s'ouvre ici)"
dire "  a. Connexion avec l'identifiant et le mot de passe affichés : voit-on l'écran ?"
dire "  b. La souris et le clavier distants agissent-ils ?"
dire "  c. Une demande d'autorisation apparaît-elle sur ce poste ? À chaque connexion ?"
dire "  d. Avec un mot de passe permanent, sans personne devant le poste : la connexion aboutit-elle ?"
dire "  e. Après « Fermer la session » (écran de connexion) : la connexion aboutit-elle ?"
dire ""
dire "Compte rendu enregistré dans $rapport"

("$outil" >/dev/null 2>&1 &)

if [ "${1:-}" = "--attendre" ]; then
    printf '\nAppuyez sur Entrée pour fermer cette fenêtre. '
    read -r _
fi
