#!/bin/bash

echo Verification des outils necessaires :

for app in which pdflatex zenity lpr
do
	echo -n "$app... "
	if path="$(which $app)"
	then
		echo "$path"
	else
		echo "ERREUR : Vous devez installer $app"
		exit 1
	fi
done

for file in ${0%/*}/tests/*
do
	if ! latex -halt-on-error $file 2>&1 >/dev/null
	then
		echo ERREUR : Installez ${file#*/}
	else
		echo ${file##*/} installé correctement, suppression des fichiers temporaires
		rm ${file##*/}.*
	fi
done

function help
{
	echo
	exit
}

while getopts "e:h-:" opt
do
	case $opt in
		e) EDITOR="$OPTARG" ;;
		h) help ;;
		-) echo "--$OPTARG non implémenté" ;;
	esac
done

#if [ -z "$EDITOR" ]
#then
#	echo "ERREUR : Variable d'environnement \$EDITOR vide ! Essayez $0 -e <éditeur>"
#	exit 1
#fi

test -d "$HOME/.candidatures.sh" || mkdir ~/.candidatures.sh

echo "Création du fichier d'adresses..."
echo "Pour stopper la saisie, rentez un nom vide"
while :
do
	read -p "Entreprise : " entreprise
	if [ -z "$entreprise" ]
	then
		break
	fi
	read -p "numero, rue : " addr1
	read -p "code postal VILLE : " addr2
	echo "$entreprise\\\\$addr1\\\\$addr2" \
    | tr '[:lower:]' '[:upper:]' \
    >> ~/.candidatures.sh/liste_adresses.txt
done

zenity --info --text="Selectionnez votre modèle lettre LaTeX en utilisant les balises du package 'lettre' (http://www.tuteurs.ens.fr/logiciels/latex/lettre.html) et en remplaçant le destinaire par '%%destinataire%%'"
template="$(zenity --file-selection)"

if ! grep '%%destinataire%%' "$template" > /dev/null
then
	echo ERREUR : Votre template ne contient pas %%destinataire%% !!!
	exit 1
fi

(
	total=$(wc ~/.candidatures.sh/liste_adresses.txt -l | cut -f 1 -d ' ')
	init=0
	cat ~/.candidatures.sh/liste_adresses.txt \
	| sort \
	| uniq \
	| while read adresse
	do
		if [ -f "$HOME/.candidatures.sh/liste_adresses.txt.old" ] \
            && grep "$(echo $adresse|sed 's/\\/\\\\\\\\/g')" ~/.candidatures.sh/liste_adresses.txt.old
        then
            echo "$adresse présent dans la liste d'adresse archivée, ignorée" \
            | sed 's/\\/\n/g' >&2
            init=$(( $init + 1 ))
            echo $(( $init * 100 / $total ))
            continue
        fi
        sed "s/%%destinataire%%/$(echo $adresse|sed 's/\\/\\\\\\\\/g')/" \
            "$template" \
            > "$HOME/.candidatures.sh/Lettre-$(echo $adresse | sed 's/\\/_/g').tex"
		init=$(( $init + 1 ))
		echo $(( $init * 100 / $total ))
	done
	) | zenity --progress --text="Préparation des Lettres... Etape 1 : generation des fichiers LaTeX... Veuillez patienter" --auto-close

cd ~/.candidatures.sh
(
	total=$(wc ~/.candidatures.sh/liste_adresses.txt -l | cut -f 1 -d ' ')
	init=0
	for file in Lettre-*.tex
	do
        # Si aucune nouvelle adresse, pas de fichier correspondant à
        # Lettre-*.tex, donc $file vaut Lettre-*.tex, qui n'existe pas.
        [ ! -f "$file" ] || pdflatex "$file" > /dev/null
		init=$(( $init + 1 ))
		echo $(( $init * 100 / $total ))
	done
) | zenity --progress --text="Préparation des Lettres... Etape 2 : compilation des fichiers PDF... Veuillez patienter" --auto-close
rm -f Lettre-*.{aux,log,tns,tex}
cd - > /dev/null

zenity --info --text="Les lettres ont ete generees dans ~/.candidatures.sh/.
Vous devriez en vérifier au moins une avec un visionneur PDF"

#read -p "Voulez-vous imprimez chaque lettre avec une copie de votre CV ? (O/n)  "
#case $REPLY in
if ! zenity --question --text="Voulez-vous imprimez chaque lettre ainsi qu'une copie de votre CV ?"
then
	exit 0
fi

zenity --info --text="Selectionnez votre CV (format directement imprimable)"
cv="$(zenity --file-selection)"

(
	total=$(wc ~/.candidatures.sh/liste_adresses.txt -l | cut -f 1 -d ' ')
	init=0
	for file in $HOME/.candidatures.sh/Lettre-*.pdf
	do
        if [ ! -f "$file" ]
        then
            init=$(( $init + 1 ))
            echo $(( $init * 100 / $total ))
            continue
        fi
		lpr "$cv" >&2
		lpr "$file" >&2
		init=$(( $init + 1 ))
		echo $(( $init * 100 / $total ))
	done
) | zenity --progress --text="Envoi des fichiers dans la file d'impression" --auto-close

rm -f $HOME/.candidatures.sh/Lettre-* 2> /dev/null

#read -p "Supprimer le fichier d'adresses ? (o/N)  "
#case $REPLY in
#	o|O) rm ~/.candidatures.sh/liste_adresses.txt ;;
#	*) ;;
#esac

if zenity --question --text="Archiver le fichier d'adresses ?"
then
    if [ -f "$HOME/.candidatures.sh/liste_adresses.txt.old" ]
    then
        if zenity --question --text="Une liste a déjà été sauvegarder. Concaténer la nouvelle a la suite ?"
        then
            cat "$HOME/.candidatures.sh/liste_adresses.txt" >> "$HOME/.candidatures.sh/liste_adresses.txt.old"
            rm "$HOME/.candidatures.sh/liste_adresses.txt"
            exit
        fi
    else
        mv "$HOME/.candidatures.sh/liste_adresses.txt" "$HOME/.candidatures.sh/liste_adresses.txt.old"
    fi
fi

if zenity --question --text="Supprimer le fichier d'adresses ?"
then
	rm ~/.candidatures.sh/liste_adresses.txt
fi
