#!/bin/bash
# Pasa la comprobación después de cada `apt`, como el usuario del escritorio.
#
# Corre como root, y ahí está el problema: el vault y el puente del agente son
# servicios de SESIÓN, y root no los ve. Preguntar desde root diría «todo en
# pie» con el vault caído, que es peor que no preguntar.
#
# Nunca falla: un enganche de apt que devuelve error convierte una actualización
# normal en un susto.
set -u

COMPROBAR=/usr/bin/filmos-comprobar
[ -x "$COMPROBAR" ] || exit 0

# Quien tiene sesión abierta. Si hay varias, la primera: esto es un aviso, no
# un informe de auditoría.
#
# Se busca por NOMBRE y el uid se resuelve con `id`, en vez de leer una columna
# de `loginctl` por su número: en esta máquina la tercera columna es el nombre y
# no el uid, y el enganche se quedaba mirando `/run/user/filmos`, que no existe.
# Diagnosticar sin quejarse es lo que hacía: decía «todo bien» con el puente
# parado.
USUARIO=""
if command -v loginctl >/dev/null 2>&1; then
  for candidato in \
      $(loginctl list-sessions --no-legend 2>/dev/null | awk '{ print $3 }') \
      $(loginctl list-users --no-legend 2>/dev/null | awk '{ print $2 }'); do
    quien="$(id -u "$candidato" 2>/dev/null)" || continue
    [ -n "$quien" ] && [ "$quien" -ge 1000 ] 2>/dev/null || continue
    [ -d "/run/user/$quien" ] || continue
    USUARIO="$candidato"
    UID_SESION="$quien"
    break
  done
fi

if [ -n "$USUARIO" ]; then
  runuser -u "$USUARIO" -- \
    env "XDG_RUNTIME_DIR=/run/user/$UID_SESION" "$COMPROBAR" --callado || true
  exit 0
fi

# Sin sesión abierta -un servidor, o una actualización por ssh sin nadie
# delante- se mira lo que se puede: es media comprobación, pero es honesta.
"$COMPROBAR" --callado || true
exit 0
