#!/bin/sh
# session-lxde — Aislamiento XDG de Canaima para LXDE
# Paquete: lxde-conf
#
# Los bloques marcados [COMÚN] son idénticos en los 7 paquetes -conf; solo
# cambian las variables de CONFIGURACIÓN y los bloques [ESPECÍFICO].
# Comparar entre paquetes con:  diff session-lxde session-<otro>
#
# El .desktop de la sesión llama a este script seguido del comando original
# de la sesión (Exec=/usr/libexec/canaima-xdg/session-lxde <comando>).

# ===== CONFIGURACIÓN (específica de este paquete) =====
ENTORNO="lxde"
DATOS="/usr/share/lxde-conf/xdg"
VERSION_PAQ="/usr/share/lxde-conf/version"
SESION_BIN="/usr/bin/startlxde"

# ===== [COMÚN 1] Limpiar entorno heredado de sesiones anteriores =====
# systemd --user, dconf-service y xfconfd pueden conservar el XDG_* de otra
# sesión aislada (Partes 9, 28 y 30 del informe). Ambos servicios se
# reactivan solos por D-Bus, ya con las rutas de esta sesión.
if command -v systemctl >/dev/null 2>&1; then
    systemctl --user unset-environment \
        XDG_CONFIG_HOME XDG_DATA_HOME XDG_CACHE_HOME XDG_STATE_HOME 2>/dev/null
fi
pkill -u "$(id -u)" -x dconf-service 2>/dev/null
pkill -u "$(id -u)" -x xfconfd 2>/dev/null

# ===== [COMÚN 2] Rutas aisladas =====
BASE="$HOME/.local/xdg/$ENTORNO"
export XDG_CONFIG_HOME="$BASE/config"
export XDG_DATA_HOME="$BASE/share"
export XDG_CACHE_HOME="$BASE/cache"
export XDG_STATE_HOME="$BASE/state"
mkdir -p "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_CACHE_HOME" "$XDG_STATE_HOME"

# ===== [COMÚN 3] Sembrar / completar la configuración de Canaima =====
# Se ejecuta cuando el perfil no tiene la marca de esta versión del
# paquete: primer inicio de sesión (incluido el usuario "en vivo" de las
# ISOs), perfil incompleto o actualización del paquete. Solo AGREGA lo que
# falta (cp -n): nunca sobrescribe lo que el usuario ya tiene.
MARCA="$BASE/.canaima-conf-version"
if [ -f "$VERSION_PAQ" ] && ! cmp -s "$VERSION_PAQ" "$MARCA"; then
    for par in "config:$XDG_CONFIG_HOME" "share:$XDG_DATA_HOME" "state:$XDG_STATE_HOME"; do
        sub=${par%%:*}
        destino=${par#*:}
        if [ -d "$DATOS/$sub" ]; then
            cp -rn --no-preserve=ownership "$DATOS/$sub/." "$destino/" 2>/dev/null || true
        fi
    done
    cp "$VERSION_PAQ" "$MARCA" 2>/dev/null || true
fi

# ===== [COMÚN 4] gvfs-metadata compartido entre entornos (Parte 18) =====
mkdir -p "$HOME/.local/xdg/_shared/gvfs-metadata"
if [ ! -L "$XDG_DATA_HOME/gvfs-metadata" ]; then
    rm -rf "$XDG_DATA_HOME/gvfs-metadata"
    ln -s "$HOME/.local/xdg/_shared/gvfs-metadata" "$XDG_DATA_HOME/gvfs-metadata"
fi

# ===== [COMÚN 5] Propagar las rutas a D-Bus y systemd --user =====
dbus-update-activation-environment --systemd \
    XDG_CONFIG_HOME XDG_DATA_HOME XDG_CACHE_HOME XDG_STATE_HOME 2>/dev/null

# ===== [ESPECÍFICO] (ninguno para este entorno) =====

# ===== [COMÚN 6] Iniciar la sesión real =====
if [ "$#" -gt 0 ]; then
    exec "$@"
fi
exec $SESION_BIN
