#!/bin/bash

# Fonction alerte : une fenêtre d'information qui met fin au programme
function alerte() {
    yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>\n<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>" \
        --form --columns="1" \
        --dialog-sep \
        --align="left" \
        --field="\n<span color=\"red\"><big><b>$1</b></big></span>:LBL" "" \
        --field="<span color=\"red\">$2</span>:LBL" "" \
        --button=" Quitter;gtk-cancel:1;Cliquez ici pour quitter" 2> /dev/null

    # retour vaut le retour de la fenêtre
    retour=$?

    # si on clic sur la croix
    if $retour -eq 252 ]; then
        # on sort du programme
        exit

    # si on clic sur le bouton quitter
    elif $retour -eq ]; then
        # on sort du programme
        exit
    fi
}

# Fonction pulse : une fenêtre qui affiche une pulse bar pendant une action
function pulse() {
    yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>\n<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>
\n
<big><b><span color=\"red\">$1</span></b></big>
\n\n\n" \
        --progress \
        --pulsate \
        --auto-close \
        --auto-kill \
        --no-buttons

    # retour vaut le retour de la fenêtre
    retour=$?

    # si on clic sur la croix
    if $retour -eq 252 ]; then
        killall mkfs mkdosfs 2> /dev/null
        exit
    fi

}

# Fonction gestion_pulse : affiche en conséquence le retour du processus de formatage
function gestion_pulse() {

    # On récupère le PID de la progress bar
    pid_yad=$(pgrep yad)

    # Tant qu'il tourne on attend
    while (ps -p $pid_yad > /dev/null) ; do
        sleep 1
    done

    # on récupère des infos du fichier pulse
    error=$(cat /tmp/formatage.log | head -n 1 | awk -F" " '{print $2}')

    # Si on trouve le mot failed
    if "$error" "failed" ]; then
        alerte "Alerte !!!" "\n\n\nLe support a été retirer avant la fin "

    # si le fichier pulse est toujours vide
    elif [[ -s $(cat /tmp/formatage.log) ]]; then
        alerte "Alerte !!!" "\n\n\nVous avez interrompu avant la fin "
    fi
}

# Fonction infos : une fenêtre qui affiche une information
function info() {
    yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">$1</span></b></big>
\n" \
        --form --columns="3" \
        --dialog-sep \
        --align="left" \
        --field="$2" "$3" \
        --button="$4" \
        --button="$5"

    # retour vaut le retour de la fenêtre
    retour=$?

    # si on clic sur la croix
    if $retour -eq 252 ]; then
        killall mkfs mkdosfs 2> /dev/null
        exit
    elif $retour -eq ]; then
        :
    else
        cmd="break"
    fi
}

# Fonction progress : une fenêtre qui affiche une progress bar pendant une action
function progress() {
    yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>\n<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>
\n
<big><b><span color=\"red\">$1</span></b></big>
\n\n\n" \
        --progress \
        --auto-close \
        --auto-kill \
        --no-buttons
}

# Fonction gestion_progress : affiche en conséquence le retour du processus de copie ou sauvegarde
function gestion_progress() {

    # On récupère le PID de la progress bar
    pid=$(pgrep yad)

    # Tant qu'il tourne on attend
    while (ps -p $pid > /dev/null) ; do
        sleep 1
    done

    i=0
    # si le fichier pulse est vide, tant qu'il est vide on lance la pulse bar (60s max)
    while -s $(cat /tmp/progress.log) ]; do
        compterebour=$((60-$i))
        echo "#Veuillez patienter $compterebour secondes max ..."
        sleep 1
        ((i++))
        # Au bout de 60s on tue les processus dd pv et yad
        if $i -eq 60 ]; then
            killall dd pv yad
            break
        fi
    done ) | pulse "Fermeture du processus en cours"

    # si le fichier progress.log est toujours vide au bout de 60s
    if -s $(cat /tmp/progress.log) ]; then
        # c'est que l'on a cliqué sur la croix, on affiche une alerte
        alerte "Alerte !!!" "\n\n\nVous avez interrompu avant la fin de $1"
    # sinon
    else
        # si on est sur une installation
        if $ret_installer "TRUE" ]; then
            # on récupère des infos du fichier progress.log, si il contient le mot erreur
            if [[ $(cat /tmp/progress.log) == *"erreur"* ]] || [[ $(cat /tmp/progress.log) == *"Erreur"* ]]; then
                error=$(cat /tmp/progress.log | head -n 1 | awk '{print$0}')
                # on affiche une alerte
                alerte "Alerte !!!" "\n\n\nLe support a été retirer avant la fin de $1\n\n$error"
            fi
        # si on est sur une sauvegarde
        else
            # on récupère la taille copié dans le fichier progress.log
            SIZE_copie=$(cat /tmp/progress.log | tail -n 1 | awk -F" " '{print $4}')
            # on supprime le caractère vide à la fin pour n'avoir qu'un nombre
            taille_copie=${SIZE_copie%?}
            # si la taille copié est inférieur à la taille de la clé
            if (( $taille_copie $taille_octet)); then
                # on affiche une alerte
                alerte "Alerte !!!" "\n\n\nLe support a été retirer avant la fin de $1\nSeulement $taille_copie octets de copiés sur $taille_octet octets"
            fi
        fi
    fi
    # si il n'y a pas eu de problème on affiche les infos de la copie ou sauvegarde
    info "$2 :" ":TXT" "$(cat /tmp/progress.log)" " Quitter;gtk-cancel:1" " Continuer;gtk-ok:0" &> /dev/null
}

# on met en variable 2 émojis
emojiPleur=$(printf '\U1F62D\n')
emojiInquiet=$(printf '\U1F914\n')

# On récupère le nom d'utilisateur du système
user=$(who | awk '{print $1}')
# variable pour la liste des types de support
lst_support="SD;USB"
# variable pour le dossier ou sont stockées vos images
folder="/home/$user/Documents/SDTools"
# variable pour la taille max
taille_max=2
# variable pour la liste des images
list_img="aucune image"
# variable pour la fenêtre
arg1="Veuillez brancher votre support avant de continuer"
# variable pour la liste des tailles
list_taille=(2 4 8 16 32 64 128)

# on reconstitue la liste des taille mais en texte par un ;
for in "${list_taille[@]}"do
    list_taille_focus="${list_taille_focus}${i};"
done

# boucle toujours vrai
while :; do

    # on récupère le dernier support monté sur le système
    montage=$(sudo fdisk -l | sed -n '/Disque/p' | tail -n 1 | awk '{print $2}'| cut -d":" -f1)

    # on supprime l'espace vide de la fin dans la variable montage
    montage_support=${montage%?}

    # on récupère le nom
    cle=$(echo $montage_support | awk -F"/" '{print $3}')

    # On récupère sa taille, sa taille arrondi et le double de la taille arrondi
    taille=$(fdisk -l | sed -n '/Disque/p' | tail -n 1 | cut -d" " -f3 )
    taille_arrondi=$(fdisk -l | sed -n '/Disque/p' | tail -n 1 | cut -d" " -f3 | cut -d"," -f1 )
    tailleDouble=$(( $taille_arrondi*))

    # On récupère la taille réelle de la clé en octet
    taille_oct=$(fdisk -l | sed -n '/Disque/p' | tail -n 1 | awk -F" " '{print $5}' | awk -F"o" '{print $1}')

    # On supprime le cratère vide de la fin dans la variable taille_octet (pour avoir uniquement des chiffres)
    taille_octet=${taille_oct%?}

    # variable cmd vide
    cmd=""

    # on détruit la variable rep si elle existe
    unset rep

    # on se déplace dans le dossier SDTools
    cd $folder

    # on y récupère toutes les images de type img ou iso que l'on stock dans la variable rep (de type tableau)
    i=0
    for in $(find *.img *.iso )do
        rep[$i]=$(basename "$j")
        ((i++))
    done

    # Si on ne trouve pas d'image
    if [[ -z ${rep[@]} ]]; then
        # le 3eme argument du formulaire à venir sera cette phrase
        list_img="aucune image"
    # si on trouve des images
    else
        # pour chaque image trouvée
        for in ${rep[@]}do
            # si elle est déjà présente dans la variable img_installer
            if [[ $k == $img_installer ]]; then
                # on ajoute le ^ devant son nom et le met dans la variable list_img2 afin que le focus soit sur elle dans le formulaire
                list_img2="$list_img2 ^$k "
            # sinon
            else
                # on met son nom dans la variable list_img2
                list_img2="$list_img2 $k "
            fi
        done
        # on reconstitue la liste des images en remplaçant les espaces par un ;
        list_img=$(echo $list_img2 | tr " " ";" )
        # on détruit list_img2
        unset list_img2
    fi

    # On affiche une fenêtre avec un formulaire
    yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">$arg1</span></b></big>
\n" \
        --form --columns="3" \
        --dialog-sep \
        --align="left" \
        --field="Formater :CHK" "$ret_formater" \
        --field="Installer :CHK" "$ret_installer" \
        --field="Sauvegarder :CHK" "$ret_sauvegarder" \
        --field=":CB" "$lst_support" \
        --field=":LBL" "" \
        --field=":LBL" "" \
        --field="Taille du support:CB" "$list_taille_focus" \
        --field="Choix de l'image :CB" "$list_img" \
        --field="Nom de l'image : LBL" "$nom_img_sauvegarder" \
        --button=" Quitter;gtk-cancel:1;Cliquez ici pour quitter" \
        --button=" Vérifier;gtk-ok;Cliquez ici pour vérifier:0" > /tmp/data.log    # les choix du formulaire sont stocké dans le fichier data.log

# formulaire sur 3 colonnes 1 4 7
#                           2 5 8
#                           3 6 9
# le champ (1) du choix pour le formatage (case à cocher)
# le champ (2) du choix pour l'installation (case à cocher)
# le champ (3) du choix pour la sauvegarde (case à cocher)
# le champ (4) du choix pour le type de support (liste)
# le champ (5) vide (label vide)
# le champ (6) vide (label vide)
# le champ (7) du choix pour la taille du support (liste)
# le champ (8) du choix pour les images à installer (liste)
# le champ (9) du choix pour le nom à donner à la sauvegarde (label)

    # retour vaut le retour de la fenêtre
    retour=$?

    # si on clic sur la croix
    if $retour -eq 252 ]; then
        # on quitte le programme
        exit

    # si on clic sur le bouton quitter
    elif $retour -eq ]; then
        # on quitte le programme
        exit
    fi

    # si on clic sur le bouton vérifier, on récupère les infos du formulaire dans des variables

    ret_formater=$(cat /tmp/data.log | awk -F"|" '{print $1}')
    ret_installer=$(cat /tmp/data.log | awk -F"|" '{print $2}')
    ret_sauvegarder=$(cat /tmp/data.log | awk -F"|" '{print $3}')
    support_choisi=$(cat /tmp/data.log | awk -F"|" '{print $4}')
    taille_max=$(cat /tmp/data.log | awk -F"|" '{print $7}')
    img_installer=$(cat /tmp/data.log | awk -F"|" '{print $8}'| awk '{$1=$1}1')
    nom_img_sauvegarder=$(cat /tmp/data.log | awk -F"|" '{print $9}')

    # on récupère la taille de l'image choisi
    SIZE=$(stat --printf="%s" $folder/$img_installer)

    # on détruit la liste avec focus et on la refait avec le nouveau choix
    unset list_taille_focus
    for in "${list_taille[@]}"do
        if $i -eq $taille_max ];then
            list_taille_focus="${list_taille_focus}^${i};"
        else
            list_taille_focus="${list_taille_focus}${i};"
        fi
    done

    # en fonction du support choisi on met le focus dessus
    if [[ $support_choisi == "USB" ]]; then lst_support="^USB;SD"else lst_support="USB;^SD"fi

    # si votre support choisis ne correspond pas au type du dernier montage, on vous alerte
    if  ([[ $cle =~ ^sd.* ]] && [[ $support_choisi == "SD" ]]) || ([[ $cle =~ ^mm.* ]] && [[ $support_choisi == "USB" ]]); then
        arg1="$emojiInquiet Vous avez choisis ${support_choisi}, \nCe qui ne correspond pas au dernier support du système: ${cle}. $emojiPleur"

    # si vous cocher formater et sauvegarder, on vous alerte
    elif [[ $ret_formater == "TRUE" ]] && [[ $ret_sauvegarder == "TRUE" ]]; then
        arg1="$emojiInquiet Choix interdit, \nOn ne formate pas dans le cas d'une sauvegarde $emojiPleur "

    # si vous cocher installer et sauvegarder, on vous alerte
    elif [[ $ret_installer == "TRUE" ]] && [[ $ret_sauvegarder == "TRUE" ]]; then
        arg1="$emojiInquiet Choix interdit, \nOn ne peut pas faire les deux $emojiPleur "

    # si vous ne cocher rien, on vous alerte
    elif [[ $ret_formater == "FALSE" ]] && [[ $ret_installer == "FALSE" ]] && [[ $ret_sauvegarder == "FALSE" ]]; then
        arg1="$emojiInquiet Vous devez faire un choix avant de vérifier $emojiPleur "

    # si vous cocher installer mais qu'il n'y a pas d'image dans le dossier SDTools, on vous alerte
    elif [[ $ret_installer == "TRUE" ]] && [[ $img_installer == "aucune image" ]]; then
        # on vous demande si vous voulez installer raspberry pi os ou la version lite
        info "Vous devez avoir une image à installer dans le dossier SDTools" "choisir une image à télécharger :CB" "Raspberry pi os;Raspberry pi os lite" " Quitter;gtk-cancel:1" " Exécuter;gtk-ok:0" > /tmp/data.log
        # si vous quittez on sort du programme
        if $? -eq ]; then
            exit
        fi
        # on récupère le non de l'image a télécharger
        img_get=$(cat /tmp/data.log | awk -F"|" '{print $1}')
        # si c'est  raspberry pi os, on le télécharge dans une bar de progression
        if [[ $img_get == "Raspberry_pi_os" ]]; then
            wget -o /tmp/progress.log --progress=dot 'https://raspberry-pi.fr/download/raspbian_latest.zip' 2>&tee /dev/stderr sed -u "s/^ *[0-9]*K[ .]*\([0-9]*%\) *\([0-9,]*[A-Z]\) *\([0-9a-z]*\).*/\1\n#Téléchargement \1 --> \3 restant à \2\/s/" progress "Téléchargement de $img_get\nSource: https://raspberry-pi.fr/telechargements/" 2> /dev/null
        # si c'est  raspberry pi os lite, on le télécharge dans une bar de progression
        else
            wget --progress=dot 'https://raspberry-pi.fr/download/raspbian_lite_latest.zip' 2>&tee /dev/stderr sed -u "s/^ *[0-9]*K[ .]*\([0-9]*%\) *\([0-9,]*[A-Z]\) *\([0-9a-z]*\).*/\1\n#Téléchargement \1 --> \3 restant à \2\/s/" progress "Téléchargement de $img_get\nSource: https://raspberry-pi.fr/telechargements/" 2> /dev/null
        fi

        # on décompresse le fichier
        unzip raspbian*.zip pulse "Décompression du fichier ${img_get}.zip"
        rm -f raspbian*.zip

    # si vous cocher sauvegarder mais que vous ne donner pas de nom, on vous alerte
    elif [[ $ret_sauvegarder == "TRUE" ]] && [[ -z $nom_img_sauvegarder ]]; then
        arg1="$emojiInquiet Vous devez donner un nom à votre image $emojiPleur "

    # si la taille du support choisis est inférieur à la taille du dernier montage, on vous alerte
    elif awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille" "$taille_max"then
            arg1="$emojiInquiet Le support est plus grand que prévu, \nOn ne prend pas de risque $emojiPleur "

    # si la taille du support choisis est supérieur à la taille du dernier montage, on vous alerte
    elif awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille_max" "$tailleDouble"then
            arg1="$emojiInquiet Le support est plus petit que ça, \nOn ne prend pas de risque $emojiPleur "

    # si la taille de l'image à installer est plus grande que le support, on vous alerte
    elif awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$SIZE" "$taille_octet"then
            alerte "Attention !!!" "$emojiInquiet Le support de $taille_octet octets est plus petit que l'image ($SIZE octets), \nVeuillez utiliser un support plus grand $emojiPleur"

    # sinon, rien de suspect, on continue
    else
        # on récupère les choix du formulaire
        arg1="Veuillez brancher votre support avant de continuer"
        recap="Support : $support_choisi \nTaille : $taille GiB \nNom : $cle\nFormatage :"
        if [[ $ret_formater == "TRUE" ]]; then recap="$recap OUI\n"else recap="$recap NON\n"fi
        if [[ $ret_installer == "TRUE" ]]; then recap="$recap Installation : $img_installer\n"else recap="$recap Installation : NON\n"fi
        if [[ $ret_sauvegarder == "TRUE" ]]; then recap="$recap Sauvegarde : $nom_img_sauvegarder\n"else recap="$recap Sauvegarde : NON\n"fi

        # on affiche un récapitulatif de ce qui va être fait (fonction info qui génère la sortie de la boucle ou pas selon votre choix)
        info "récapitulatif :" ":TXT" "$recap" " Retour;edit-undo-rtl:1" " Exécuter;gtk-ok:0" &> /dev/null
        # si on clic sur retour, on reste dans la boucle car la variable $cmd vaut rien, si on clic sur exécuter la variable $cmd vaut break, on quitte la boucle
        $cmd
    fi
done


# si vous avez choisi de formater
if [[ $ret_formater == "TRUE" ]]; then
    # si la taille du support est plus grand que prévu, on vous alerte et quitte le programme
    if awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille" "$taille_max"then
        alerte "Attention !!!" "\n\n\n$emojiInquiet Le support est plus grand que prévu, on ne prend pas de risque $$emojiPleur "
        exit
    # sinon
    else
        # on démonte le support du système
        umount ${montage_support}2> /dev/null

        # Si le support est une cle USB
        if "$support_choisi" "USB" ]; then

            # On formate le support (en écrivant le retour dans le fichier formatage.log et dans un shell différent)
            mkfs.vfat $montage_support -F32 -> /tmp/formatage.log &

            # On récupère le PID du processus de formatage
            pid_formate=$(pgrep mkfs)

        # Si le support est une carte SD
        else

            # On formate le support (en écrivant le retour dans le fichier formatage.log et dans un shell différent)
            mkdosfs $montage_support -F32 -> /tmp/formatage.log &

            # On récupère le PID du processus de formatage
            pid_formate=$(pgrep mkdosfs)

        fi
        # Tant que le processus de formatage tourne
        while ps -p $pid_formate &>/dev/nulldo
            # on écrit dans la pulse bar "Veuillez patienter""
            echo "#Veuillez patienter ..."
            sleep 1
        done
        # Quand c'est fini,  on écrit dans la pulse bar "Formatage terminé"
        echo "#Formatage terminé"
        sleep 2) | pulse "Formatage $cle en cours" &  # La pulse bar tourne pendant ce qui est en parenthèse

        # on lance la fonction gestion_pulse qui vérifie le statut de la fenêtre
        gestion_pulse "du formatage" "Le formatage est terminé"

    fi
fi

# si vous avez choisi de sauvegarder un support dans une image disque
if [[ $ret_sauvegarder == "TRUE" ]]; then
    # On démonte le support du système
    umount /dev/${cle}2> /dev/null

    # On se déplace dans ce dossier
    cd $folder

    # On crée une image vide avec le nom que vous avez choisi
    touch "$folder/$nom_img_sauvegarder.img"

    # On y clone le support
    (dd if=/dev/"${cle}" pv -n -s "$taille_octet" dd bs=4096 of="$folder/$nom_img_sauvegarder.img" &> /tmp/progress.log2>&progress "Sauvegarde de : \n$cle dans ${nom_img_sauvegarder}.img" &

    # On lance la fonction qui gère la sortie de la copie
    gestion_progress "la sauvegarde" "La sauvegarde est terminée" > /dev/null
fi

# si vous avez choisi d'installer une image disque
if [[ $ret_installer == "TRUE" ]]; then
    # si la taille du support est plus grand que prévu, on vous alerte et quitte le programme
    if awk 'BEGIN{exit ARGV[1]<ARGV[2]}' "$taille" "$taille_max"then
        alerte "Attention !!!" "\n\n\n$emojiInquiet Le support est plus grand que prévu, on ne prend pas de risque $emojiPleur "
        exit
    sinon
    else
        # On démonte le support du système
        umount /dev/${cle}2> /dev/null

        # On installe l'image sur le support en utilisant la commande «pv» pour avoir le pourcentage dans la progresse bar
        (dd if="$folder/$img_installer" pv -n -s "$SIZE" dd bs=4096 of=/dev/"$cle" &> /tmp/progress.log2>&progress "Installation de : \n$img_installer sur $cle" &
        # On lance la fonction qui gère la sortie de la copie
        gestion_progress "l'installation" "L'installation est terminée" 2> /dev/null

    fi
fi

# si vous avez installer «Raspberry pi os»
if [[ $ret_installer == "TRUE" ]] && [[ $img_installer == *"raspios"* ]]; then

    # on affiche une fenêtre qui demande si vous voulez configurer le SSH et le wifi
    arg1="Vous devez renseigner vos identifiants pour le Wifi"

    yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">Vous avez installé Raspberry pi os</span></b></big>
\n" \
        --form --columns="3" \
        --dialog-sep \
        --align="left" \
        --field="Configurer le SSH et le WIFI :CB" "NON;OUI" \
        --button=" Quitter;gtk-cancel:1" \
        --button=" Continuer;gtk-ok:0" > /tmp/data.log

    # retour vaut le retour de la fenêtre
    retour=$?

    # si on clic sur la croix, on quitte le programme
    if $retour -eq 252 ]; then
        exit
    # si on clic sur quitter, on quitte le programme
    elif $retour -eq ]; then
        exit
    fi

    # on récupère le choix
    reponse=$(cat /tmp/data.log | awk -F"|" '{print $1}')

    # si c'est oui
    if [[ $reponse == "OUI" ]]; then

        # tant que les variable sont vide,  on affiche une fenêtre qui demande si vos identifiants wifi
        while [[ -z $SSID  ]] || [[ -z $mdpWIFI  ]]; do

            yad --title="SDTools" --width="600" --height="400" --fixed --center \
                --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
                --image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
                --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">$arg1</span></b></big>
\n" \
                --form --columns="3" \
                --dialog-sep \
                --align="left" \
                --field="SSID " "" \
                --field="Clé WIFI :H" "" \
                --button=" Quitter;gtk-cancel:1;Cliquez ici pour quitter" \
                --button=" Valider;gtk-ok;Cliquez ici pour valider:0" > /tmp/data.log


            # retour vaut le retour de la fenêtre
            retour=$?

            # si on clic sur la croix, on quitte le programme
            if $retour -eq 252 ]; then
                exit

            # si on clic sur le bouton quitter, on quitte le programme
            elif $retour -eq ]; then
                exit
            fi

            # on récupère les identifiants du wifi
            SSID=$(cat /tmp/data.log | awk -F"|" '{print $1}')
            mdpWIFI=$(cat /tmp/data.log | awk -F"|" '{print $2}')
        done

        # On créer les dossiers de montage
        mkdir /media/$user/boot

        # On monte les partitions dans ce dossier en fonction du support
        if "$support_choisi" "USB" ]; then
            mount /dev/"${cle}1" -o uid=1000 /media/$user/boot
        else
            mount /dev/"${cle}p1" -o uid=1000 /media/$user/boot
        fi

        # On attend 0.5 s
        sleep 0.5

        # On y créer un fichier vide nommé ssh
        touch /media/$user/boot/ssh

        # On crée un fichier vide nommé wpa_supplicant dans le dossier boot
        touch /media/$user/boot/wpa_supplicant.conf

        # On écrit ces lignes dans ce fichier (configuration du réseaux wifi au démarrage)
        echo "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev" >> /media/$user/boot/wpa_supplicant.conf
        echo "country=FR" >> /media/$user/boot/wpa_supplicant.conf
        echo "update_config=1" >> /media/$user/boot/wpa_supplicant.conf
        echo "" >> /media/$user/boot/wpa_supplicant.conf
        echo "network={" >> /media/$user/boot/wpa_supplicant.conf
        echo " ssid=\"$SSID\"" >> /media/$user/boot/wpa_supplicant.conf
        echo " psk=\"$mdpWIFI\"" >> /media/$user/boot/wpa_supplicant.conf
        echo "}" >> /media/$user/boot/wpa_supplicant.conf
        sleep 0.5

    fi

    # on affiche une fenêtre qui demande si vous voulez télécharger des scripts de configuration
    if (yad --title="SDTools" --width="600" --height="400" --fixed --center \
        --window-icon="/usr/share/icons/SDTools.png" --text-align="center" \
        --image="/usr/share/icons/SDTools.png" --borders="20" -separator="|" --item-separator=";" \
        --text="<big><big><big><big><big><b>SDTools</b></big></big></big></big></big>
<span color=\"green\" background=\"black\">Développé </span><span color=\"yellow\" background=\"black\">par</span><span color=\"red\" background=\"black\"> manu</span>\n
\n
<big><b><span color=\"red\">Vous avez installé Raspberry pi os</span></b></big>
\n" \
            --form --columns="3" \
            --dialog-sep \
            --align="left" \
            --field="Installer les scripts utiles au premier démarrage ? :CB" "NON;OUI" \
            --button=" Quitter;gtk-cancel:1" \
            --button=" Continuer;gtk-ok:0" > /tmp/data.log then

        # on récupère le choix
        reponse=$(cat /tmp/data.log | awk -F"|" '{print $1}')

        # si c'est oui
        if [[ $reponse == "OUI" ]]; then

            # On monte les partitions dans ce dossier en fonction du support
            if "$support_choisi" "USB" ]; then
                mount /dev/"${cle}2" /media/$user
            else
                mount /dev/"${cle}p2" /media/$user
            fi

            # On verifie si git est installé
            echo $(dpkg --get-selections | grep git) > /tmp/lamp.log
            # si le premier champs ou le 3 eme est git
            if [[ $(cat /tmp/lamp.log | awk -F" " '{print $1}') == "git" ]] || [[ $(cat /tmp/lamp.log | awk -F" " '{print $3}') == "git" ]]; then
                # si le deuxième champs ou quatrième est «deinstall», le paquet n'est plus installé
                if [[ $(cat /tmp/lamp.log | awk -F" " '{print $2}') == "deinstall" ]] || [[ $(cat /tmp/lamp.log | awk -F" " '{print $4}') == "deinstall" ]]; then
                    # on retourne 1
                    flag=1
                # sinon c'est que le paquet est installé
                else
                    # on retourne 0
                    flag=0
                fi
            # sinon, le premier champs est vide, le paquet n'a jamais été installé
            else
                # on retourne 1
                flag=1
            fi

            (
            # On attend 1 s
            sleep 1
            # si il ne l'est pas
            if (( flag  == )); then
                echo "#Installation de git"
                apt-get install git -# on install git
            fi
            sleep 1
            # on clone le dossier Script_
            echo "#Copie du dossier Script_Rpi"
            cd /media/$user/home/pi
            git clone https://github.com/weedmanu/Script_Rpi.git  &> /tmp/git.log
            sleep 1
            # on rend les script exécutable et on vous rend propriétaire du dossier Script_Rpi
            echo "#Attribution des permissions"
            chmod +x Script_Rpi/*.sh
            chown -R $user:$user Script_Rpi
            sleep 1
            # On attend 1 s
            sleep 1

            ) | pulse "téléchargement des scripts en cours" &  # La pulse bar tourne pendant ce qui est en parenthèse

            gestion_pulse "téléchargement des scripts" "Le téléchargement des scripts est terminé" 2> /dev/null
        fi
    fi
fi

# on démonte la clé
umount /dev/${cle}* &>/dev/null
umount /media/$user/* &>/dev/null
# On supprime le dossier de montage
rm -fR /media/$user/boot
info "Fin du programme" ":LBL" "" " Quitter;gtk-cancel:1" " Continuer;gtk-ok:0" &> /dev/null
# fin du programme
exit