#!/bin/bash
# Le 25.2.2026. Script d'installation automatique d'un certain nombre de logiciels.
# Installation en mode USER (utilisateur normal)
# Pour Linux Mint 22.3, avec Cinnamon
# pour l'exécuter et installer une version normale, taper (sans le sudo) : 
# bash ~/Apps/Disks/apt_22_3_user_mint.sh normal | tee ~/Apps/Disks/resultat_user_mint.txt
#
# pour l'exécuter et installer une version experte, taper (sans le sudo) :
# bash ~/Apps/Disks/apt_22_3_user_mint.sh expert | tee ~/Apps/Disks/resultat_user_mint.txt
#
# pour l'exécuter et installer une version normale avec GETAX pour Genève, taper (sans le sudo) :
# bash ~/Apps/Disks/apt_22_3_user_mint.sh normal geneve | tee ~/Apps/Disks/resultat_user_mint.txt
#
# echo "================================="
# echo "la commande: " $0
# echo "le nombre de paramètres: " $#
# echo "le premier paramètre: " $1   le deuxième est: $2   etc.
# echo -n "Pas de retour à la ligne à la fin"

if [[ $# == "0" ]]; then
  param_ok=0
  echo "Aucun paramètre n'a été donné"
  code_fin=1
elif [[ "$1" == "normal" ]]; then
  param_ok=1
  param1=$1   # NE pas mettre d'espace autour du symbole  =
elif [[ "$1" == "expert" ]]; then
  param_ok=1
  param1=$1   # NE pas mettre d'espace autour du symbole  =
else
  param_ok=0
  echo "Un paramètre incorrecte a été donné"
  code_fin=2
fi

if [[ $param_ok == 0 ]]; then
    code_fin=$((code_fin + 100))  # arrête l'exécution et indique une erreur n° $code_fin
    echo
    echo "Tapez l'une des deux commandes suivante :"
    echo "./script22_param_if_presence.sh normal"
    echo "./script22_param_if_presence.sh expert"
    echo
    echo "La première fait une installation pour un utilisateur normal"
    echo "La seconde  fait une installation pour un utilisateur expert"
    exit $code_fin   # arrête l'exécution et indique une erreur n° $code_fin
else
  if [[ $param1 == "normal" ]]; then
    echo "Le paramètre 'normal' a été donné"
  elif [[ $param1 == "expert" ]]; then
    echo "Le paramètre 'expert' a été donné"
  else
    echo "On ne devrait jamais arriver ici."
    echo "Si on y arrive, c'est qu'il y a une erreur de programme."
  fi

  if [[ $# == "2" ]]; then
    # Il y a un deuième paramètre
    param2=$2
  else
    param2=""
  fi
fi
# param1  indique si on veut une installation normale ou experte
# param2  indique si on veut une installation avec Getax, utile pour les Genevois uniquement.

echo ==================================================================
echo "Copie du contenu du dossiers (Mint-Y-Aqua-bg) : _themes/  dans le dossier $HOME/.themes"
echo ==================================================================
# -r => récursif, donc tout  et  -p => en conservant les permissions.
mkdir -p "$HOME/.themes"
cp -rp "$HOME/Apps/Disks/_themes/"* "$HOME/.themes/"

echo ==================================================================
echo "Création d'un lanceur de [Double Commander] sur le bureau"
echo ==================================================================
# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/doublecmd1132.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Version=1.1.xx" >> "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=Double Commander" >> "$ICI"
echo "Comment=Gestionnaire de fichiers" >> "$ICI"
echo "Exec=/usr/bin/doublecmd" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/doublecmd.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

# 1. Lancer Double Commander en arrière-plan. Probablement que cela aura déjà été fait avant.
# Le  but est de créer le dossier des paramètres dans $HOME/.config/doublecmd
# On utilise --headless si on veut que ce soit invisible, 
# mais un lancement normal est plus sûr pour la création du profil.
doublecmd &

# Récupérer l'identifiant du processus (PID)
DC_PID=$!

echo "Double Commander lancé (PID: $DC_PID). Attente de 5 secondes pour la création du profil..."

# 2. Attendre que Double Commander crée les fichiers
sleep 5

# 3. Fermer Double Commander proprement
# On tente d'abord un signal de terminaison normal
kill $DC_PID

# Petit délai pour laisser le temps au processus de s'arrêter
sleep 3

# Vérification : si Double Commander est encore là, on force la fermeture
if ps -p $DC_PID > /dev/null; then
    kill -9 $DC_PID
fi

echo "Double Commander est fermé. Le dossier de profil est maintenant prêt."
echo "Copie des paramètres par défaut et des icônes de la barre des icônes"
cp $HOME/Apps/Disks/DoubleCommander/doublecmd.xml $HOME/.config/doublecmd/
cp $HOME/Apps/Disks/DoubleCommander/zip.ini $HOME/.config/doublecmd/
cp $HOME/Apps/Disks/DoubleCommander/colors.json $HOME/.config/doublecmd/

# Modification du nom de l'utilisateur dans les fichiers
# Définition du fichier cible
TARGET_FILE="$HOME/.config/doublecmd/doublecmd.xml"

# 1. Vérifier si le fichier existe avant de tenter quoi que ce soit
if [ ! -f "$TARGET_FILE" ]; then
    echo "Erreur : Le fichier $TARGET_FILE est introuvable."
else
  # 2. Utilisation de sed pour remplacer /bg par /nom_utilisateur
  # -i : modifie le fichier directement (in-place)
  # s : commande de substitution
  # g : global (remplace toutes les occurrences sur une ligne)
  sed -i "s|/bg|/$USER|g" "$TARGET_FILE"
  echo "Configuration de  $TARGET_FILE  mise à jour pour l'utilisateur : $USER"
fi

# Pas nécessaire, car copie du dossier dans lui-même
#cp $HOME/Apps/doublecmd1132/settings/doublecmd.xml $HOME/Apps/doublecmd1132/settings/
#cp $HOME/Apps/doublecmd1132/settings/zip.ini $HOME/Apps/doublecmd1132/settings/
#cp $HOME/Apps/doublecmd1132/settings/colors.json $HOME/Apps/doublecmd1132/settings/

# Modification du nom de l'utilisateur dans les fichiers
# Définition du fichier cible
TARGET_FILE="$HOME/Apps/doublecmd1132/settings/doublecmd.xml"

# 1. Vérifier si le fichier existe avant de tenter quoi que ce soit
if [ ! -f "$TARGET_FILE" ]; then
    echo "Erreur : Le fichier $TARGET_FILE est introuvable."
else
  # 2. Utilisation de sed pour remplacer /bg par /nom_utilisateur
  # -i : modifie le fichier directement (in-place)
  # s : commande de substitution
  # g : global (remplace toutes les occurrences sur une ligne)
  sed -i "s|/bg|/$USER|g" "$TARGET_FILE"
  echo "Configuration de  $TARGET_FILE  mise à jour pour l'utilisateur : $USER"
fi

echo ==================================================================
echo "Création d'un lanceur de [Firefox] sur le bureau"
echo ==================================================================
# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/firefox.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Version=147" >> "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=Firefox" >> "$ICI"
echo "Comment=Navigateur Web développé par Mozilla" >> "$ICI"
echo "Exec=/usr/bin/firefox" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/firefox.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

echo "Copie des paramètres par défaut de Firefox est fait à la fin"

echo ==================================================================
echo "Création d'un lanceur de [Google Chrome] sur le bureau"
echo ==================================================================
# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/chrome.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=Google Chrome" >> "$ICI"
echo "Comment=Navigateur Web développé par Google" >> "$ICI"
echo "Exec=/usr/bin/google-chrome" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/chrome.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

echo ==================================================================
echo "Création d'un lanceur de [Chromium] sur le bureau"
echo ==================================================================
# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/chromium.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=Chromium" >> "$ICI"
echo "Comment=Navigateur Web développé par Google, version libre" >> "$ICI"
echo "Exec=/usr/bin/chromium" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/chromium.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

echo ==================================================================
echo "Création d'un lanceur de [Microsoft Teams] sur le bureau"
echo "Il est installé dans /opt/teams-for-linux"
echo ==================================================================
# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/teams.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Version=1.4.5" >> "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=Microsoft Teams" >> "$ICI"
echo "Comment=Communication par Internet, comme skype autrefois" >> "$ICI"
echo "Exec=/opt/teams-for-linux/teams-for-linux" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/teams-for-linux.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

echo ==================================================================
echo "Création d'un lanceur de [RustDesk] sur le bureau"
echo ==================================================================
# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/RustDesk.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=RustDesk" >> "$ICI"
echo "Comment=Romote Desktop, aide à distance par Internet" >> "$ICI"
echo "Exec=/usr/bin/rustdesk %u" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/rustdesk.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

echo ==================================================================
echo "skanpage, installation flatpak"
echo "Et création d'un lanceur sur le bureau"
echo "!!!!!!!!!! ATTENTION CELA PEUT PRENDRE UNE DIZAINE DE MINUTES !!!!!!!!!!"
echo ==================================================================
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak update --user --appstream
flatpak install --user --assumeyes --noninteractive flathub org.kde.skanpage

# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/skanpage.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Version=25.12.2" >> "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=Skanpage" >> "$ICI"
echo "Comment=Permet de scanner des pages avec un scanner" >> "$ICI"
echo "Exec=flatpak run org.kde.skanpage" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/skanpage.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI

echo ==================================================================
echo "skanlite, installation flatpak"
echo "Et création d'un lanceur sur le bureau"
echo ==================================================================
flatpak install --user --assumeyes --noninteractive flathub org.kde.skanlite

# La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
ICI="$HOME/Bureau/skanlite.desktop"   #pour création sur le bureau
#ICI="lance.desktop"  # pour des tests
echo "[Desktop Entry]" > "$ICI"
echo "Version=23.08.5" >> "$ICI"
echo "Type=Application" >> "$ICI"
echo "Name=skanlite" >> "$ICI"
echo "Comment=Permet de scanner des pages avec un scanner" >> "$ICI"
echo "Exec=flatpak run org.kde.skanlite" >> "$ICI"
echo "Icon=$HOME/Apps/0icons/skanlite.png" >> "$ICI"
echo "Path=" >> "$ICI"
echo "Terminal=false" >> "$ICI"
echo "StartupNotify=false" >> "$ICI"
chmod 764 $ICI


if [[ $param1 == "expert" ]]; then
  echo ==================================================================
  echo "Installation de pygame pour Python"
  echo "Déja fait dans : apt_22_3_sudo_mint.sh"
  echo ==================================================================
  # python3 -m pip install -U pygame --user

  echo ==================================================================
  echo "Installation de arcade pour Python. Pas fait"
  echo ==================================================================
  #NONpython3 -m pip install -U arcade --user

  echo ==================================================================
  echo "Seamonkey, un navigateur tout-en-un de Mozilla"
  echo "Création d'un lanceur sur le bureau"
  echo ==================================================================
  # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
  ICI="$HOME/Bureau/seamonkey25323.desktop"   #pour création sur le bureau
  #ICI="lance.desktop"  # pour des tests
  echo "[Desktop Entry]" > "$ICI"
  echo "Version=2.53.23" >> "$ICI"
  echo "Type=Application" >> "$ICI"
  echo "Name=Seamonkey" >> "$ICI"
  echo "Comment=Navigateur Web de Mozilla" >> "$ICI"
  echo "Exec=$HOME/Apps/seamonkey25323/seamonkey" >> "$ICI"
  echo "Icon=$HOME/Apps/0icons/seamonkey.png" >> "$ICI"
  echo "Path=" >> "$ICI"
  echo "Terminal=false" >> "$ICI"
  echo "StartupNotify=false" >> "$ICI"
  chmod 764 $ICI

  echo ==================================================================
  echo "Création d'un lanceur de [Autokey] sur le bureau"
  echo ==================================================================
  # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
  ICI="$HOME/Bureau/AutoKey.desktop"   #pour création sur le bureau
  #ICI="lance.desktop"  # pour des tests
  echo "[Desktop Entry]" > "$ICI"
  echo "Type=Application" >> "$ICI"
  echo "Name=AutoKey" >> "$ICI"
  echo "Comment=Automatisation de tâches par programmation python" >> "$ICI"
  echo "Exec=/usr/bin/autokey" >> "$ICI"
  echo "Icon=$HOME/Apps/0icons/autokey.png" >> "$ICI"
  echo "Path=" >> "$ICI"
  echo "Terminal=false" >> "$ICI"
  echo "StartupNotify=false" >> "$ICI"
  chmod 764 $ICI

  echo ==================================================================
  echo "BlueGriffon, un éditeur WYSIWYG de pages Web"
  echo "Création d'un lanceur sur le bureau"
  echo ==================================================================
  #tar -xf  $HOME/Apps/Disks/Bluegriffon/bluegriffon-3.1.Ubuntu18.04-x86_64.tar.bz2 -C $HOME/Apps
  #Il est déjà copié dans le dossier $HOME/Apps

  # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
  ICI="$HOME/Bureau/bluegriffon301.desktop"   #pour création sur le bureau
  #ICI="lance.desktop"  # pour des tests
  echo "[Desktop Entry]" > "$ICI"
  echo "Version=3.01" >> "$ICI"
  echo "Type=Application" >> "$ICI"
  echo "Name=BlueGriffon" >> "$ICI"
  echo "Comment=Editeur Web" >> "$ICI"
  echo "Exec=$HOME/Apps/bluegriffon301/bluegriffon" >> "$ICI"
  echo "Icon=$HOME/Apps/0icons/bluegriffon.png" >> "$ICI"
  echo "Path=" >> "$ICI"
  echo "Terminal=false" >> "$ICI"
  echo "StartupNotify=false" >> "$ICI"
  chmod 764 $ICI

  echo ==================================================================
  echo "geogebra 6.0.804.0, installation flatpak"
  echo "Et création d'un lanceur sur le bureau"
  echo ==================================================================
  flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  flatpak update --user --appstream
  flatpak install --user --assumeyes --noninteractive flathub org.geogebra.GeoGebra
  
  # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
  ICI="$HOME/Bureau/geogebra6.desktop"   #pour création sur le bureau
  #ICI="lance.desktop"  # pour des tests
  echo "[Desktop Entry]" > "$ICI"
  echo "Version=6.0.804.0" >> "$ICI"
  echo "Type=Application" >> "$ICI"
  echo "Name=Geogebra 6" >> "$ICI"
  echo "Comment=Géométrie interactive" >> "$ICI"
  echo "Exec=flatpak run org.geogebra.GeoGebra" >> "$ICI"
  echo "Icon=$HOME/Apps/0icons/geogebra.png" >> "$ICI"
  echo "Path=" >> "$ICI"
  echo "Terminal=false" >> "$ICI"
  echo "StartupNotify=false" >> "$ICI"
  chmod 764 $ICI

  echo ==================================================================
  echo "Création d'un lanceur de [Arduino] sur le bureau"
  echo ==================================================================
  # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
  ICI="$HOME/Bureau/arduino.desktop"   #pour création sur le bureau
  #ICI="lance.desktop"  # pour des tests
  echo "[Desktop Entry]" > "$ICI"
  echo "Version=2.3.7" >> "$ICI"
  echo "Type=Application" >> "$ICI"
  echo "Name=Arduino" >> "$ICI"
  echo "Comment=Développement de programme pour microcontrolleurs" >> "$ICI"
  echo "Exec=$HOME/Apps/arduino-ide_2.3.7_Linux_64bit/arduino-ide" >> "$ICI"
  echo "Icon=$HOME/Apps/0icons/arduino.png" >> "$ICI"
  echo "Path=" >> "$ICI"
  echo "Terminal=false" >> "$ICI"
  echo "StartupNotify=false" >> "$ICI"
  chmod 764 $ICI
fi

if [[ $param2 == "geneve" ]]; then
  # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
  ICI="$HOME/Bureau/getax2025.desktop"   #pour création sur le bureau
  #ICI="lance.desktop"  # pour des tests
  echo "[Desktop Entry]" > "$ICI"
  echo "Version=1.01" >> "$ICI"
  echo "Type=Application" >> "$ICI"
  echo "Name=getax-pp-2025" >> "$ICI"
  echo "Comment=GeTax 2025, pour la déclaration d'impôts à Genève" >> "$ICI"
  echo "Exec=$HOME/Apps/getax-pp-2025/getax-pp-2025" >> "$ICI"
  echo "Icon=$HOME/Apps/0icons/getax2025_96x96.png" >> "$ICI"
  echo "Path=" >> "$ICI"
  echo "Terminal=false" >> "$ICI"
  echo "StartupNotify=false" >> "$ICI"
  chmod 764 $ICI
fi

echo ==================================================================
echo "Copie des paramètres par défaut de Firefox, "
echo "Il faut que Firefox ait été exécuté au moins une fois avant"
echo "et il faut que Firefox NE soit PAS en cours d'exécution."
echo ==================================================================

# Vérification si Firefox est en cours d'exécusion. Si c'est le cas, l'arrête.
# 1. Vérifier si Firefox est en cours d'exécution
if pgrep -x "firefox" > /dev/null; then
    echo "Firefox est en cours d'exécution. Fermeture en cours..."
    
    # 2. Demander à Firefox de se fermer proprement (SIGTERM)
    pkill -x "firefox"
    
    # 3. Attendre que le processus soit complètement terminé pour éviter de corrompre les fichiers
    while pgrep -x "firefox" > /dev/null; do
        sleep 1
    done
#else
#    echo "Firefox n'est pas en cours d'exécution."
fi

echo "Firefox est fermé. Le dossier de profil est maintenant prêt à être modifié."

# Fonction pour trouver le profil Firefox
find_firefox_profile() {
#=======================
    # Chercher dans les emplacements possibles (par ordre de priorité)
    local locations=(
        "$HOME/.config/mozilla/firefox"
        "$HOME/.mozilla/firefox"
        "$HOME/snap/firefox/common/.mozilla/firefox"
    )
    
    for loc in "${locations[@]}"; do
        if [ -d "$loc" ] && [ -f "$loc/profiles.ini" ]; then
            echo "$loc"
            return 0
        fi
    done
    
    return 1
}

# Fichier à copier dans le dossier de configuration de firefox
SOURCE_PREFS_JS="$HOME/Apps/Disks/Firefox/prefs.js"
SOURCE_XULSTORE="$HOME/Apps/Disks/Firefox/xulstore.json"

# Détermination du dossier où se trouve les paramètres de Firefox
firefox_dir=$(find_firefox_profile)

if [ -z "$firefox_dir" ]; then
    echo "❌ Profil Firefox introuvable"
else
	echo "✅ Profil Firefox trouvé : $firefox_dir"
    profile_path=$(find "$firefox_dir" -maxdepth 1 -type d \( -name "*.default-release" \) | head -n 1)

	if [ -z "$profile_path" ]; then
		echo "⚠️ Profil Firefox introuvable, Firefox n'a peut-être pas encore été lancé"
		echo "💡 Lancez Firefox une fois, puis relancez ce script"
		echo "Ou après avoir lancé et refermé Firefox, copier le fichier $SOURCE_PREFS_JS dans les paramètres de firefox"
    else
		# Copie de prefs.js et de xulstore.json
		if [ -f "$SOURCE_PREFS_JS" ]; then
			cp -f "$SOURCE_PREFS_JS" "$profile_path/prefs.js"
			cp -f "$SOURCE_XULSTORE" "$profile_path/xulstore.json"
			echo "✅ prefs.js copié dans : $profile_path"
			echo "✅ xulstore.json copié dans : $profile_path"
			echo "ℹ️ Les préférences seront appliquées au prochain démarrage de Firefox"
		else
			echo "❌ Fichier source introuvable : $SOURCE_PREFS_JS"
		fi
	fi
fi

echo ==================================================================
echo "A CONTINUER EN TAPANT, en mode utilisateur normal :"
echo "bash ~/Apps/Disks/raccourcis_user_mint.sh | tee ~/Apps/Disks/resultat_raccourcis.txt"
echo ==================================================================

exit 0   # Pas d'erreur
