#! /bin/bash

##################
# GNOME #
##################

# Définir la variable DBUS_SESSION_BUS_ADDRESS si elle n'existe pas
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then
    export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
fi
# Lancer dbus-launch si nécessaire
if ! dbus-launch --sh-syntax >/dev/null 2>&1; then
    eval $(dbus-launch --sh-syntax)
fi

# Installation des paquets
sudo apt update
sudo apt install -y \
    gir1.2-gmenu-3.0 \
    pipx \
    libgnome-menu-3-0 \
    gnome-shell-extensions \
    dconf-cli \
    dbus-x11

# Configuration utilisateur
echo "🔧 Configuration des paramètres GNOME pour l'utilisateur actuel..."
gsettings set org.gnome.desktop.wm.preferences button-layout 'appmenu:minimize,maximize,close'
gsettings set org.gnome.shell favorite-apps "['firefox-esr.desktop', 'org.gnome.Nautilus.desktop', 'libreoffice-startcenter.desktop', 'org.gnome.Software.desktop']"

sudo mkdir -p /usr/share/wallpapers/GN
sudo cp -r files/wallpapers/* /usr/share/wallpapers/GN/
gsettings set org.gnome.desktop.background picture-uri "file:///usr/share/wallpapers/GN/clouds.png"



# Configuration système
echo "Application des paramètres par défaut pour tous les utilisateurs..."
sudo mkdir -p /etc/dconf/db/local.d/ && sudo cp files/00-defaults $_
sudo cp files/user /etc/dconf/profile/user
sudo dconf update


########################
## EXTENSIONS GNOME ##
# Installation via pipx > gnome-extensions-cli/gext
# Paramétrage
########################



# Extensions à installer (IDs officiels)
EXTENSIONS=(
    "dash-to-panel@jderose9.github.com"
    "arcmenu@arcmenu.com"
)

# S'assurer que pipx est installé
if ! command -v pipx &>/dev/null; then
    echo "pipx n'est pas installé. Installation..."
    sudo apt install pipx -y
    pipx ensurepath
    export PATH="$HOME/.local/bin:$PATH"
    hash -r
fi

# Installation de gnome-extensions-cli (gext)
pipx install gnome-extensions-cli --system-site-packages --force
export PATH="$HOME/.local/bin:$PATH"
hash -r

# Paramétrage des extensions
sudo cp files/logo_icon_gn.png /usr/share/icons/
echo "Importation des préférences de dash-to-panel..."
dconf load /org/gnome/shell/extensions/dash-to-panel/ < files/dconf/dash-to-panel.conf

sudo dconf update

# Vérification de la version de GNOME Shell
GNOME_SHELL_VERSION=$(gnome-shell --version | cut -d' ' -f3)
echo "Version de GNOME Shell détectée : $GNOME_SHELL_VERSION"

# Installation et activation des extensions
echo "Installation et activation des extensions GNOME..."
for ext in "${EXTENSIONS[@]}"; do
    echo "Installation de l'extension $ext..."
    if ! gext install "$ext" ; then
        echo "Échec de l'installation de $ext. Vérifiez votre connexion internet ou l'ID de l'extension."
    else
        echo "Activation de l'extension $ext..."
        gnome-extensions enable "$ext"
    fi
done

echo "Installation terminée. Redémarrez GNOME Shell (Alt+F2 puis 'r') pour appliquer les changements."



##################
# GNOME - Mise en place pour les nouveaux utilisateurs
##################

echo "🔧 Mise en place des paramètres de Gnome pour les (futurs) nouveaux utilisateurs."

mkdir -p tmp
dconf dump /org/gnome/shell/ > tmp/gnome-extensions.conf
sudo mkdir -p /etc/skel/.config/dconf/ && sudo cp tmp/gnome-extensions.conf $_

# Copie des extensions dans /usr/share
sudo cp -r ~/.local/share/gnome-shell/extensions/* /usr/share/gnome-shell/extensions/

# Modification des droits sur le fichier 'metadata.json' de chaque extension
for ext in "${EXTENSIONS[@]}"; do
    metadata_path="/usr/share/gnome-shell/extensions/$ext/metadata.json"
    if [ -f "$metadata_path" ]; then
        echo "Modification des droits sur $metadata_path"
        sudo chmod 644 "$metadata_path"
    else
        echo "⚠️  Fichier $metadata_path introuvable, extension peut-être non copiée correctement."
    fi
done

# Création du script de post-login GNOME qui active les extensions
sudo tee /usr/local/bin/activate-gnome-extensions.sh > /dev/null << 'EOF'
#!/bin/bash
exec >> ~/.config/gnome-extensions-activate.log 2>&1
set -e

# Fonction pour activer une extension et vérifier son succès
activate_extension() {
    local ext="$1"
    if gnome-extensions info "$ext" >/dev/null 2>&1; then
        echo "[+] Activation de l'extension : $ext"
        gnome-extensions enable "$ext"
    else
        echo "[!] Extension introuvable : $ext"
        return 1
    fi
}

echo "[*] Chargement des paramètres GNOME..."
dconf load /org/gnome/shell/ < ~/.config/dconf/gnome-extensions.conf

# Liste des extensions
EXTENSIONS=(
    "dash-to-panel@jderose9.github.com"
    "arcmenu@arcmenu.com"
)

# Activation des extensions
for ext in "${EXTENSIONS[@]}"; do
    activate_extension "$ext"
done

# Suppression du .desktop uniquement si tout a réussi
echo "[✓] Toutes les opérations ont réussi. Suppression du .desktop."
rm -f ~/.config/autostart/gnome-extensions-activate.desktop
EOF

# Rendre le script exécutable
sudo chmod +x /usr/local/bin/activate-gnome-extensions.sh

# Création du fichier .desktop pour autostart dans /etc/skel
sudo mkdir -p /etc/skel/.config/autostart
sudo tee /etc/skel/.config/autostart/gnome-extensions-activate.desktop > /dev/null << 'EOF'
[Desktop Entry]
Type=Application
Name=GNOME Extensions Auto-Activate
Exec=/usr/local/bin/activate-gnome-extensions.sh
X-GNOME-Autostart-enabled=true
NoDisplay=true
EOF

# Modification du pack d'icônes
#bash change-icons.sh
