#!/bin/bash
# Le 25.2.2026
# ---------------------------------------------
# Script final pour ajouter des lanceurs dans la barre de tâches
# l'applet Application Launchers (panel-launchers@cinnamon.org)
# - Compatible Mint 22.3
# - Prévention des doublons
#
# Pour l'exécuter en mode utilisateur (sans le "sudo") : 
# bash ~/Apps/Disks/barre_taches.sh
#
# ---------------------------------------------
# Ajoute le lanceur d'applications s'il n'est pas déjà présent.

# Vérifier qu'on n'est pas root
if [ "$EUID" -eq 0 ]; then
    echo "⚠️ Ne pas exécuter ce script en root !"
    exit 1
fi


# 1️⃣ Supprimer l'applet "Liste groupée de fenêtres" (grouped-window-list)
# ========================================================================

applet_to_remove="grouped-window-list@cinnamon.org"

# Lire la configuration actuelle
current=$(gsettings get org.cinnamon enabled-applets)

# Vérifier si l'applet existe
if echo "$current" | grep -q "$applet_to_remove"; then
    # Supprimer toutes les entrées contenant cet applet
    new_config=$(echo "$current" | sed "s/, *'[^']*${applet_to_remove}[^']*'//g" | sed "s/'[^']*${applet_to_remove}[^']*', *//g")
    
    # Appliquer la nouvelle configuration
    gsettings set org.cinnamon enabled-applets "$new_config"
    echo "✅ Applet 'Liste groupée de fenêtres' supprimé"
else
    echo "ℹ️ L'applet 'Liste groupée de fenêtres' n'est pas présent"
fi


# 2️⃣ Ajouter l'applet "Liste de fenêtres" (window-list)
# =======================================================

applet_to_add="window-list@cinnamon.org"

# Relire la configuration (après la suppression)
current=$(gsettings get org.cinnamon enabled-applets)

# Vérifier si l'applet existe déjà
if echo "$current" | grep -q "$applet_to_add"; then
    echo "ℹ️ L'applet 'Liste de fenêtres' est déjà présent"
else
    # Trouver le prochain ID d'applet disponible
    #max_id=$(echo "$current" | grep -oP ":\K[0-9]+(?=\')" | sort -n | tail -1)
    #new_id=$((max_id + 1))
    new_id=$(gsettings get org.cinnamon next-applet-id)

    # Créer la nouvelle entrée (panel1, zone center, position 0)
    # L'applet liste de fenêtres se place généralement au centre
    #new_entry="'panel1:center:0:${applet_to_add}:${new_id}'"
    new_entry="'panel1:left:1:${applet_to_add}:${new_id}'"
    
    # Ajouter l'applet à la liste
    new_config=$(echo "$current" | sed "s/\]$/, $new_entry]/")
    
    # Appliquer la configuration
    gsettings set org.cinnamon enabled-applets "$new_config"

    # Stocke l'id pour la prochaine applet
    next_id=$((new_id + 1))
    gsettings set org.cinnamon next-applet-id "$next_id"

    echo "✅ Applet 'Liste de fenêtres' ajouté avec succès"
fi

# Ajoute l'applet du lanceur d'applications dans la barre de tâches
# =================================================================
# Lire la configuration actuelle
current=$(gsettings get org.cinnamon enabled-applets)

# UUID de l'applet Lanceurs
applet_uuid="panel-launchers@cinnamon.org"

#echo $applet_uuid  # == 'panel-launchers@cinnamon.org'  qui se trouve sous $HOME/.config/cinnamon/spices

# Vérifier si l'applet existe déjà
if echo "$current" | grep -q "$applet_uuid"; then
    echo "L'applet Lanceurs est déjà présent"
else
  # Trouver le prochain ID d'applet disponible
  #max_id=$(echo "$current" | grep -oP ":\K[0-9]+(?=\')" | sort -n | tail -1)
  #new_id=$((max_id + 1))
  new_id=$(gsettings get org.cinnamon next-applet-id)

  # Créer la nouvelle entrée (panel1, zone left, position 0)
  new_entry="'panel1:right:0:${applet_uuid}:${new_id}'"

  # Ajouter l'applet à la liste
  new_config=$(echo "$current" | sed "s/\]$/, $new_entry]/")
  # Information sur la signification de : sed "s/\]$/, $new_entry]/"
  # sed fait une substitution : s/ce_que_je_cherche/ce_que_je_remplace/
  # s/.../.../  commande de remplacement
  # \]  un crochet fermant ] (échappé avec \)
  # $   fin de ligne
  # , $new_entry]  ce qu’on met à la place

  # Appliquer la configuration
  gsettings set org.cinnamon enabled-applets "$new_config"

  # Stocke l'id pour la prochaine applet
  next_id=$((new_id + 1))
  gsettings set org.cinnamon next-applet-id "$next_id"

  echo "Applet Lanceurs ajouté avec succès"

  # --- 4️⃣ Redémarrer Cinnamon pour appliquer ---
  # Nécessaire pour que l'applet soit visible par la suite.
  echo "🔄 Redémarrage de Cinnamon pour initialiser l'applet..."
  cinnamon --replace &

  # Attendre que Cinnamon crée le dossier et le fichier de l'applet (sécurité de 10 secondes max)
  echo "⏳ Attente de l'initialisation de l'applet..."
  sleep 8
fi

# Ajoute des applications dans le lanceur d'applications.
# =======================================================
# --- 1️⃣ Cherche le nom et chemin complet du fichier JSON de l'applet ---
# Répertoire de base de l'applet
applet_dir="$HOME/.config/cinnamon/spices/panel-launchers@cinnamon.org"

# Trouver l'ID de l'applet panel-launchers dans la configuration
applet_id=$(gsettings get org.cinnamon enabled-applets | grep -oP "panel-launchers@cinnamon.org:\K[0-9]+")

if [ -z "$applet_id" ]; then
    echo "Erreur : L'applet panel-launchers n'est pas activé"
else
  # Construire le nom du fichier JSON
  applet_json="${applet_dir}/${applet_id}.json"

  # Vérifier si le fichier existe
  if [ ! -f "$applet_json" ]; then
      echo "Erreur : Le fichier $applet_json n'existe pas"
  else      
    echo "Fichier trouvé : $applet_json"

    # --- 2️⃣ Vider complètement la launcherList existante ---
    echo "🗑️ Suppression de tous les lanceurs existants..."
    jq '.launcherList.value = []' "$applet_json" > "${applet_json}.tmp" && mv "${applet_json}.tmp" "$applet_json"
    echo "✅ LauncherList vidée"

    # --- 2️⃣ Liste des lanceurs à ajouter ---
    # Simple nom de fichier .desktop  On peut sélectionner ceux qui doivent venir dans la barre de tâches
    new_apps=("firefox.desktop"\
              "google-chrome.desktop"\
              "thunderbird.desktop"\
              #"nemo.desktop"\
              "doublecmd.desktop"\
              #"libreoffice-startcenter.desktop"\
              "org.gnome.Terminal.desktop"\
              #"gimp.desktop"\
              #"org.geogebra.GeoGebra.desktop:flatpak"\
              #"geany.desktop"\
              "verbiste.desktop"\
              #"org.gnome.Mines.desktop"\
              )

    # --- 3️⃣ Ajouter chaque lanceur si absent ---
    for app in "${new_apps[@]}"; do
        # Vérifier que le fichier .desktop existe
        if [ ! -f "$HOME/.local/share/applications/$app" ] && \
           [ ! -f "/usr/share/applications/$app" ] && \
           [ ! -f "/var/lib/flatpak/exports/share/applications/$app" ]; then
            echo "⚠️ .desktop introuvable : $app (ignoré)"
            continue
        fi

        # Vérifier si le lanceur est déjà dans launcherList.value
        # Ce n'est plus nécessaire, vu qu'on a vidé la launcher liste
        exists=$(jq --arg app "$app" '.launcherList.value | index($app)' "$applet_json")
        if [ "$exists" = "null" ]; then
            # Ajouter le lanceur
            jq --arg app "$app" '.launcherList.value += [$app]' "$applet_json" > "${applet_json}.tmp" && mv "${applet_json}.tmp" "$applet_json"
            echo "➕ Ajout du lanceur : $app"
        else
            echo "✅ Le lanceur $app est déjà présent"
        fi
    done

    # --- 4️⃣ Redémarrer Cinnamon pour appliquer ---
    echo "🔄 Redémarrage de Cinnamon..."
    cinnamon --replace &

    echo "🎉 Les lanceurs ont été ajoutés correctement et sans doublons !"
  fi
fi

echo ==================================================================
echo "!!!!! AVANT DE CONTINUER, il peut être bon de lancer Winecfg, pour qu'il se configure."
echo
echo "Pour ajouter des programmes Windows :"
echo "A CONTINUER EN TAPANT en mode utilisateur (sans le sudo) : "
echo "bash ~/Apps/Disks/wine_inst.sh"
echo ==================================================================

exit 0   # Pas d'erreur
