#!/bin/bash
# ------------------------------------------------------------------
# Titre        : Script d'installation automatique pour GeTax 2025 (Linux Ubuntu et dérivé, comme Mint)
# Description  : Installe Java, GeTax et crée les raccourcis menu/bureau.
# Auteur       : [Bernard Gisin]
# Date         : 13 Février 2026
# Version      : 1.0
# Testé sur    : Linux Mint 22, Ubuntu 24.04
# Dépendances  : zenity, default-jre, tar, wget (ou curl)
# Double cliquer sur le fichier : "install_getax.run"  pour l'exécuter et commencer l'installation.
# ------------------------------------------------------------------

# --- CONFIGURATION ---
#URL_TELECHARGEMENT="https://..."  # Si vous ajoutez le téléchargement auto plus tard

SOURCE="$HOME/Apps/getax2025_96x96.png"
DEST01="$HOME/Apps"
DEST02="$HOME/Apps/0icons"
# On trouve le chemin officiel du Bureau (compatible Français 'Bureau' / Anglais 'Desktop')
# La commande xdg-user-dir est standard sur Mint.
DOSSIER_BUREAU=$(xdg-user-dir DESKTOP)

# --- ÉTAPE 1 : VÉRIFICATION ET INSTALLATION DE ZENITY ---
if ! command -v zenity &> /dev/null; then
    # zenity  n'est pas déjà installé.
    # Normalement,  zenity  est installé par défaut sous  Ubuntu  et sous  Mint.
    # Pour pouvoir informer l'utilisateur de ce que l'on fait,
    # il faut que le script soit lancé dans un terminal.
    # Si ce n'est pas le cas, on exécute un terminal, avec le script à l'intérieur.
    
    # --- ÉTAPE 1.1 : FORCER LE TERMINAL ---
    # On vérifie si le script est lancé dans un terminal interactif (TTY).
    # Si ce n'est pas le cas (ex: double-clic depuis le bureau), on le relance dans un terminal.
    if [ ! -t 0 ]; then
        # x-terminal-emulator est une commande générique sous Linux (Debian/Mint/Ubuntu)
        # qui lance le terminal par défaut du système.
        x-terminal-emulator -e "$0"
        exit 0
    fi

    # Message en mode TEXTE (car Zenity n'est pas encore là)
    clear
    echo "=================================================="
    echo " INSTALLATION REQUISE"
    echo "=================================================="
    echo "Ce programme nécessite l'outil d'affichage 'Zenity'."
    echo "Il va être installé maintenant."
    echo ""
    echo "Veuillez entrer votre mot de passe administrateur (sudo)"
    echo "lorsqu'il vous sera demandé ci-dessous."
    echo "=================================================="
    echo ""

    # Installation
    # On met à jour la liste des paquets pour éviter les erreurs "paquet introuvable"
    sudo apt-get update -qq
    sudo apt-get install -y zenity

    echo ""
    echo "Vérification de l'installation..."

    # --- ÉTAPE 1.2 : TRANSITION VERS LE MODE GRAPHIQUE ---
    # On revérifie si Zenity est là maintenant
    if command -v zenity &> /dev/null; then
        # SUCCÈS : On affiche le message AVEC Zenity !
        zenity --info \
            --title="Succès" \
            --text="<b>Zenity a été installé avec succès !</b>\n\nL'installation de GeTax peut maintenant continuer\nen mode graphique." \
            --width=400
    else
        # ÉCHEC : On reste en mode texte pour l'erreur
        echo "ERREUR CRITIQUE : L'installation de Zenity a échoué."
        echo "Vérifiez votre connexion internet et relancez le script."
        echo "ou installez le logiciel zenity à la main et relancez ce programme."
        echo "ou utilisez le programme install_getax2025_geek.run depuis un Terminal."
        echo "Appuyez sur la touche ENTER pour quitter..."
        read
        exit 1
    fi
fi

# --- LE RESTE DE VOTRE SCRIPT (Mode Graphique) ---
# À partir d'ici, vous pouvez utiliser zenity pour tout le reste.

# --- ÉTAPE 2 : La Sélection à choix multiples
# --separator=" " est CRUCIAL ici : il remplace la barre verticale "|" par un espace
# pour que la boucle "for" comprenne bien la liste ensuite.
CHOIX=$(zenity --list --checklist \
    --title="Installation de GeTax et Java" \
    --width=650 --height=500 \
    --ok-label="Lancer" \
    --cancel-label="Quitter" \
    --text="Par défaut :\n\
° un dossier  Apps  va être créé et Getax va être installé dans ce dossier.\n\
° une icône de lancement de GeTax va être placée sur le bureau.\n\
° une machine virtuelle java va être installée, s'il n'y en a pas déjà une.\n\n\
Vous pouvez choisir de modifier les actions par défaut.\n\
Par exemple pour ne faire que la création de l'icône sur le bureau, s'il a été effacé par erreur.\n" \
    --column="Install" --column="Logiciel/choix" --column="Description" \
    --separator=" " \
    TRUE "getax_2025" "Installation du programme de déclaration d'impôts." \
    TRUE "icone_de_lancement" "Création d'une icône de lancement de GeTax sur le bureau." \
    TRUE "java" "Vérification et installation d'une machine virtuelle java." \
    2> /dev/null)
    # le  "2> /dev/null"  empêche l'affichage d'un WARNING lorsqu'on presse sur la touche ENTER.
# Si l'utilisateur annule ou ne choisit rien
if [ -z "$CHOIX" ]; then
    # zenity --error --text="Aucun logiciel sélectionné. Annulation."
    exit 0
fi

# --- ÉTAPE 3 : L'Installation
for Cas in $CHOIX; do
    # echo $Cas  # Pourl le développement

    if [[ $Cas == "getax_2025" ]]; then
        # Installation du programme GeTax 2025
        # 1. Déterminer la ligne où commence l'archive (après le marqueur __ARCHIVE_BELOW__)
        SKIP=$(awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0;}' "$0")

        # 2. Créer le dossier d'extraction
        mkdir -p "$DEST01"

        # 3. Extraire la partie binaire du présent fichier ($0)
        #echo "Extraction des fichiers..."
        tail -n +$SKIP "$0" | tar -xz -C "$DEST01"

        # 4. Crée un dossier pour l'icône et y place l'icône de GeTax2025
        mkdir -p "$DEST02"
        mv -n "$SOURCE" "$DEST02"
        rm -f "$SOURCE"

        # Au cas où l'on aurait mis des fichiers temporaires dans le dossier suivant
        #rm -rf /tmp/getax_install
    fi

    if [[ $Cas == "icone_de_lancement" ]]; then
        # Création d'une icône de lancement sur le bureau
        # La première ligne efface le contenu du fichier et y met la ligne : [Desktop Entry]
        ICI="$DOSSIER_BUREAU/getax2025.desktop"   #pour création sur le bureau
        #ICI="lance.desktop"  # pour des tests
        echo "[Desktop Entry]" > "$ICI"
        echo "Version=1.xx" >> "$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=$DEST01/getax-pp-2025/getax-pp-2025" >> "$ICI"
        echo "Icon=$DEST02/getax2025_96x96.png" >> "$ICI"
        echo "Path=" >> "$ICI"
        echo "Terminal=false" >> "$ICI"
        echo "StartupNotify=false" >> "$ICI"

        # On assure aussi que le fichier .desktop est bien exécutable (au cas où)
        chmod 755 "$ICI"
        
        # On force le rafraîchissement (C'est l'équivalent du F5)
        # On peut cliquer sur le bureau, puis sur F5 pour mettre à jour les icônes.
        # Pour redémarrer le bureau Cinnamon, tapez Alt+F2, puis r, puis la touche ENTER
        touch "$DOSSIER_BUREAU"
    fi

    if [[ $Cas == "java" ]]; then
        # --- VÉRIFICATION ET INSTALLATION DE JAVA ---

        # 1. Test : Est-ce que Java est déjà là ?
        if command -v java &> /dev/null; then
            zenity --info --text="Java est déjà installé sur ce système.\n\
Aucune installation supplémentaire n'est requise."
        else
            # 2. Information à l'utilisateur
            zenity --info \
                --title="Composant manquant" \
                --text="<b>Java est nécessaire pour GeTax.</b>\n\n\
Ce composant n'est pas détecté sur votre système.\n\
Nous allons l'installer maintenant." \
                --width=400

            # 3. Boucle de demande de mot de passe (pour gérer les erreurs de frappe)
            while true; do
                # Demande du mot de passe
                PASS=$(zenity --password \
                    --title="Authentification requise" \
                    --text="Veuillez entrer votre mot de passe administrateur\npour installer Java :")

                # Si l'utilisateur annule (bouton Annuler ou Croix), on arrête tout
                if [ $? -ne 0 ]; then
                    zenity --error --text="Installation annulée. GeTax ne peut pas fonctionner sans Java."
                    exit 1
                fi

                # Test du mot de passe avec sudo
                # L'option -S lit le mot de passe depuis l'entrée standard (echo)
                # L'option -v (validate) met à jour le "ticket" sudo sans lancer de commande
                echo "$PASS" | sudo -S -v 2> /dev/null

                if [ $? -eq 0 ]; then
                    # Si le code retour est 0, le mot de passe est bon
                    break
                else
                    zenity --error --text="Mot de passe incorrect. Veuillez réessayer."
                fi
            done

            # 4. Installation avec barre de progression (Pulsante car on ne connait pas la durée exacte)
            (
                echo "# Mise à jour de la liste des paquets..."
                # Le "> /dev/null 2>&1" est indispensable ici pour ne pas envoyer le texte de apt-get à zenity
                echo "$PASS" | sudo -S apt-get update -qq > /dev/null 2>&1

                echo "# Installation de la Machine Virtuelle Java..."
                # On réinjecte le mot de passe pour être sûr (même si sudo a une mémoire tampon)
                echo "$PASS" | sudo -S apt-get install -y default-jre > /dev/null 2>&1
                
                echo "# Vérification de l'installation..."
                sleep 1

            ) | zenity --progress \
                --title="Installation de Java" \
                --pulsate \
                --auto-close \
                --no-cancel

            # 5. Vérification finale
            if command -v java &> /dev/null; then
                zenity --info --text="<b>Java a été installé avec succès !</b>"
            else
                zenity --error --text="Une erreur est survenue lors de l'installation de Java."
                exit 1
            fi
        fi
    fi

done

# --- ÉTAPE 4 : Information que l'installation est terminée.
zenity --info --text="Installation terminée avec succès !\n" --width=300

exit 0

# NE PAS SUPPRIMER LA LIGNE CI-DESSOUS
__ARCHIVE_BELOW__
