#!/bin/sh
# session-gnome — Aislamiento XDG de Canaima para GNOME
# Paquete: gnome-conf
#
# Wrapper de referencia. Los bloques marcados [COMÚN] deben ser idénticos
# en todos los paquetes -conf; solo cambian las variables de CONFIGURACIÓN
# y el bloque [ESPECÍFICO]. Comparar entre paquetes con:
#   diff session-gnome session-<otro>

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

# ===== [COMÚN 1] Limpiar entorno heredado de sesiones anteriores =====
# systemd --user y dconf-service pueden conservar el XDG_* de otra sesión
# aislada (Partes 9 y 28 del informe).
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 XDG_DATA_DIRS 2>/dev/null
fi
pkill -u "$(id -u)" -x dconf-service 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 2b] Tema Canaima incluido en el paquete (Parte 47) =====
# El paquete trae su propia copia del tema Canaima (Claro y Oscuro) en
# /usr/share/<paquete>/temas (themes/, o plasma/ en KDE). Se pone esa carpeta
# primero en XDG_DATA_DIRS, así el escritorio usa ese tema aunque la máquina
# no tenga tema-canaima o tenga una versión vieja. Se quita antes cualquier
# carpeta de tema de otro -conf que viniera de una sesión anterior.
TEMAS_PAQ="${DATOS%/xdg}/temas"
if [ -d "$TEMAS_PAQ" ]; then
    dirs=$(printf '%s\n' "${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" | tr ':' '\n' \
        | grep -v '^/usr/share/[^/]*-conf/temas/*$' | grep -v '^$' | paste -sd: -)
    export XDG_DATA_DIRS="$TEMAS_PAQ:${dirs:-/usr/local/share:/usr/share}"
fi

# ===== [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 login, perfil incompleto (p. ej. dconf/user presente
# pero sin gtk-4.0/) o actualización del paquete. Solo AGREGA lo que
# falta (cp -n): nunca sobrescribe lo que el usuario ya tiene.
# Reemplaza la copia a /home/* y /etc/skel que antes hacía el postinst.
MARCA="$BASE/.canaima-conf-version"
if [ -f "$VERSION_PAQ" ] && ! cmp -s "$VERSION_PAQ" "$MARCA"; then
    if [ -d "$DATOS/config" ]; then
        cp -rn --no-preserve=ownership "$DATOS/config/." "$XDG_CONFIG_HOME/" 2>/dev/null || true
    fi
    if [ -d "$DATOS/share" ]; then
        cp -rn --no-preserve=ownership "$DATOS/share/." "$XDG_DATA_HOME/" 2>/dev/null || true
    fi
    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] GNOME: verificar que el wallpaper exista (Parte 35) =====
# La resolución del PNG varía según la versión de desktop-base; si el
# archivo configurado no existe, buscar una alternativa en su carpeta.
reparar_fondo() {
    clave="$1"
    valor=$(dconf read "$clave" 2>/dev/null)
    ruta=${valor#\'}
    ruta=${ruta%\'}
    ruta=${ruta#file://}
    [ -n "$ruta" ] || return 0
    [ -f "$ruta" ] && return 0
    dir=$(dirname "$ruta")
    nuevo=""
    for c in "$dir/3840x2160.png" "$dir/2560x1440.png" "$dir/canaima-alternativo.png"; do
        if [ -f "$c" ]; then nuevo="$c"; break; fi
    done
    if [ -z "$nuevo" ]; then
        for c in "$dir"/*.png; do
            if [ -f "$c" ]; then nuevo="$c"; break; fi
        done
    fi
    if [ -n "$nuevo" ]; then
        dconf write "$clave" "'file://$nuevo'" 2>/dev/null
    fi
    return 0
}
# La configuración de Canaima solo define el fondo del estilo oscuro. Si el
# del estilo claro no está definido, GNOME usa el predeterminado de Debian
# (desktop-base): usar el mismo fondo de Canaima para ambos (Parte 41).
# Si el usuario elige su propio fondo claro, queda definido y no se toca.
FONDO_CLARO=$(dconf read /org/gnome/desktop/background/picture-uri 2>/dev/null)
FONDO_OSCURO=$(dconf read /org/gnome/desktop/background/picture-uri-dark 2>/dev/null)
if [ -z "$FONDO_CLARO" ] && [ -n "$FONDO_OSCURO" ]; then
    dconf write /org/gnome/desktop/background/picture-uri "$FONDO_OSCURO" 2>/dev/null
fi
reparar_fondo /org/gnome/desktop/background/picture-uri
reparar_fondo /org/gnome/desktop/background/picture-uri-dark

# ===== [ESPECÍFICO] GNOME: activar la extensión "iniciar en el escritorio" =====
# Una sola vez por usuario: si luego la desactiva, se respeta.
EXT_UUID="canaima-sin-actividades@canaima.softwarelibre.gob.ve"
MARCA_EXT="$BASE/.canaima-ext-sin-actividades"
if [ ! -e "$MARCA_EXT" ]; then
    lista=$(dconf read /org/gnome/shell/enabled-extensions 2>/dev/null)
    case "$lista" in
        *"'$EXT_UUID'"*) ;;
        ""|"@as []"|"[]") dconf write /org/gnome/shell/enabled-extensions "['$EXT_UUID']" 2>/dev/null ;;
        *) dconf write /org/gnome/shell/enabled-extensions "${lista%]}, '$EXT_UUID']" 2>/dev/null ;;
    esac
    touch "$MARCA_EXT" 2>/dev/null
fi

# ===== [COMÚN 6] Iniciar la sesión real =====
exec "$SESION_BIN" "$@"
