#!/bin/sh

SCRIPT_KEY="9odsFla6knoaluupsusajshredEyatocvokikecunHethyHiyauc1DriDuheOrn0Ogx1twowOnsEjlyiag4OcUgZed"
FIRST_KEY="tettOw8Quiajill6Otnenyu1DramLyct"
RETURN_KEY="glyd9wryatNes5DriebOmEshbepFbak5"
LOOP_KEY="OdJulryks5OndAkdipensoshk3DrebEg"
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/games
CLI_PATH="/usr/local/bin/ladn-cli"
TMP_DIR="/tmp/ladn-cli"
BASE_SCRIPT_URL="https://download.ladn.org/scripts"
USER=$(whoami)

SCRIPT_NAME="LADN Command Line Interface"
ORGANIZATION="L'Atelier du Numérique"
CONTACT="contact@ladn.org"
WEBSITE="https://ladn.org"

DEP_INST="Installation de dépendances en cours, patientez..."
MSG_FIRST="------------------------------
Bienvenue dans "$SCRIPT_NAME"

Organisation : "$ORGANIZATION"
Contact : "$CONTACT"
Site web : "$WEBSITE"
------------------------------"

MSG_NOROOT="
Vous n'êtes pas root ! Exécutez ladn-cli en tant que root. Abandon."
MSG_LOOP="Retour au menu principal."
MSG_UNAVAILABLE="
Indisponible pour le moment..."
MSG_NUMB_SELECT="Saisissez le numéro de votre choix et appuyez sur Entrée ---> "
MSG_DL="
Téléchargement..."
MSG_EXEC="Exécution..."
MSG_REOPEN="Retour à ladn-cli !"
MSG_NOOPTIONS="ladn-cli s'exécute sans options ! Abandon."
MSG_DLFAIL="Le téléchargement à échoué..."
MSG_ERR1="Erreur ! La variable $USER est vide. Abandon."

SLEEP_S=".1"
SLEEP_M=".5"
SLEEP_L="1"

EXIT_OK="0"
EXIT_USR="1"
EXIT_NOROOT="2"
EXIT_CMD="3"
EXIT_UNK="4"
EXIT_ERR="5"

D_HEIGHT="15"
D_WIDTH="40"
D_MENU_HEIGHT="5"

# Définition des fonctions

EXEC_UPDATE() {

	ls /usr/local/bin/ladn-fsi > /dev/null 2>&1

	if [ "$?" = "0" ]; then

		rm /usr/local/bin/ladn-fsi > /dev/null 2>&1
		echo "Mise à jour en cours !"
		wget -qO- dl1.ladn.org | sh -
		EXEC_QUIT

	fi

}

EXEC_LOGO() {

tput clear
tput cup 0 0
sleep .1
echo "
      ___        _________  ______     __      __       _________  ___        ___
"
tput cup 0 0
sleep .1
echo "
      ___        _________  ______     __      __       _________  ___        ___
     /  /       /  ___   / /  _  |    /  |    / /      /  ______/ /  /       /  /
"
tput cup 0 0
sleep .1
echo "
      ___        _________  ______     __      __       _________  ___        ___
     /  /       /  ___   / /  _  |    /  |    / /      /  ______/ /  /       /  /
    /  /       /  /  /  / /  / |  |  / /||   / /      /  /       /  /       /  /
"
tput cup 0 0
sleep .1
echo "
      ___        _________  ______     __      __       _________  ___        ___
     /  /       /  ___   / /  _  |    /  |    / /      /  ______/ /  /       /  /
    /  /       /  /  /  / /  / |  |  / /||   / /      /  /       /  /       /  /
   /  /       /  /__/  / /  /  /  / / / ||  / / ___  /  /       /  /       /  /
"
tput cup 0 0
sleep .1
echo "
      ___        _________  ______     __      __       _________  ___        ___
     /  /       /  ___   / /  _  |    /  |    / /      /  ______/ /  /       /  /
    /  /       /  /  /  / /  / |  |  / /||   / /      /  /       /  /       /  /
   /  /       /  /__/  / /  /  /  / / / ||  / / ___  /  /       /  /       /  /
  /  /       /  ___   / /  /  /  / / /  || / / /__/ /  /       /  /       /  /
"
tput cup 0 0
sleep .1
echo "
      ___        _________  ______     __      __       _________  ___        ___
     /  /       /  ___   / /  _  |    /  |    / /      /  ______/ /  /       /  /
    /  /       /  /  /  / /  / |  |  / /||   / /      /  /       /  /       /  /
   /  /       /  /__/  / /  /  /  / / / ||  / / ___  /  /       /  /       /  /
  /  /       /  ___   / /  /  /  / / /  || / / /__/ /  /       /  /       /  /
 /  /_____  /  /  /  / /  /_/  /  / /   ||/ /      /  /_____  /  /_____  /  /
"
tput cup 0 0
sleep .2
echo "
      ___        _________  ______     __      __       _________  ___        ___
     /  /       /  ___   / /  _  |    /  |    / /      /  ______/ /  /       /  /
    /  /       /  /  /  / /  / |  |  / /||   / /      /  /       /  /       /  /
   /  /       /  /__/  / /  /  /  / / / ||  / / ___  /  /       /  /       /  /
  /  /       /  ___   / /  /  /  / / /  || / / /__/ /  /       /  /       /  /
 /  /_____  /  /  /  / /  /_/  /  / /   ||/ /      /  /_____  /  /_____  /  /
/________/ /__/  /__/ /______/   /_/    |__/      /________/ /________/ /__/
"

}

EXEC_FIRST() {

	EXEC_LOGO
	sleep "$SLEEP_S"
	echo "$MSG_FIRST"
	sleep "$SLEEP_L"
	tput clear

}

EXEC_RETURN() {

	echo "$MSG_REOPEN"

}

EXEC_LOOP() {

	echo "$MSG_LOOP"

}

EXEC_NOROOT() {

	sleep "$SLEEP_S"
	echo "$MSG_NOROOT"
	sleep "$SLEEP_S"
	exit "$EXIT_NOROOT"

}

EXEC_UNAVAILABLE() {

	echo "$MSG_UNAVAILABLE"
	sleep "$SLEEP_M"
	exec sh "$CLI_PATH" "$LOOP_KEY"

}

EXEC_QUIT() {

	exit "$EXIT_OK"

}

EXEC_BACK() {

	sleep "$SLEEP_S"
	exec "$CLI_PATH" "$LOOP_KEY"

}

EXEC_NOOPTIONS() {

	echo "$MSG_NOOPTIONS"
	sleep "$SLEEP_M"
	exit "$EXIT_UNK"

}

EXEC_DEP() {

	ls /usr/bin/dialog > /dev/null 2>&1 || ls /usr/dialog > /dev/null 2>&1 || ls /usr/local/dialog > /dev/null 2>&1

	if [ "$?" != "0" ]; then

		echo "$DEP_INST"
		apt -y install dialog > /dev/null 2>&1 || apt-get -y install dialog > /dev/null 2>&1 || yum -y install dialog > /dev/null 2>&1

	fi

}

EXEC_INST() {

	sleep "$SLEEP_S"
	echo "$MSG_DL"
	sleep "$SLEEP_S"
	wget --no-cache "$BASE_SCRIPT_URL"/"$SCRIPT_DIR"/"$SCRIPT_FILE" > /dev/null 2>&1

	if [ "$?" != "0" ]; then

		echo "$MSG_DLFAIL"
		sleep "$SLEEP_M"
		exec sh "$CLI_PATH" "$RETURN_KEY"

	fi

	echo "$MSG_EXEC"
	"$EXEC_ENGINE" "$SCRIPT_FILE" "$SCRIPT_KEY"
	rm "$SCRIPT_FILE"
	exec "$CLI_PATH" "$RETURN_KEY"

}

EXEC_MENU_MAIN() {

	cd "$TMP_DIR"
	dialog --no-cancel --menu "Menu Principal" "$D_HEIGHT" "$D_WIDTH" "$D_M_HEIGHT" \
	1 "ladn-os" \
	2 "Personnalisation (disponible prochainement)" \
	3 "Pilotes" \
	4 "Logiciels" \
	5 "Configuration" \
	E "Quitter" 2> dialog.output
	CLI_MENU=$(cat dialog.output)
	tput clear

}

EXEC_MENU_1() {

	cd "$TMP_DIR"
	dialog --no-cancel --menu "Menu Principal" "$D_HEIGHT" "$D_WIDTH" "$D_M_HEIGHT" \
	1 "KDE Splash" \
	2 "Plymouth Splash" \
	R "Retour" \
	E "Quitter" 2> dialog.output
	CLI_MENU=$(cat dialog.output)
	tput clear
}

EXEC_MENU_2() {

	EXEC_UNAVAILABLE

}

EXEC_MENU_3() {

	cd "$TMP_DIR"
	dialog --no-cancel --menu "Pilotes" "$D_HEIGHT" "$D_WIDTH" "$D_M_HEIGHT" \
	1 "Brother Printer Installer" \
	R "Retour" \
	E "Quitter" 2> dialog.output
	CLI_MENU=$(cat dialog.output)
	tput clear

}

EXEC_MENU_4() {

	cd "$TMP_DIR"
	dialog --no-cancel --menu "Pilotes" "$D_HEIGHT" "$D_WIDTH" "$D_M_HEIGHT" \
	1 "Brave" \
	2 "Skype" \
	3 "TeamViewer" \
	4 "OnlyOffice" \
	5 "Netxcloud Sync" \
	6 "OpenConcerto" \
	R "Retour" \
	E "Quitter" 2> dialog.output
	CLI_MENU=$(cat dialog.output)
	tput clear

}

EXEC_MENU_5() {

	cd "$TMP_DIR"
	dialog --no-cancel --menu "Pilotes" "$D_HEIGHT" "$D_WIDTH" "$D_M_HEIGHT" \
	1 "Instaler les dépôts de paquets packages.ladn.org" \
	R "Retour" \
	E "Quitter" 2> dialog.output
	CLI_MENU=$(cat dialog.output)
	tput clear

}

EXEC_ERR1() {

	sleep "$SLEEP_S"
	echo "$MSG_ERR1"
	sleep "$SLEEP_L"
	exit "$EXIT_ERR"

}

if [ -n "$1" ]; then

	if [ "$1" = "$FIRST_KEY" ]; then # Si exécutez par l'utilisateur

		EXEC_DEP
		EXEC_UPDATE
		EXEC_FIRST

	elif [ "$1" = "$RETURN_KEY" ]; then # Si ré-exécution après un script d'installation

		EXEC_RETURN

	elif [ "$1" = "$LOOP_KEY" ]; then # Si l'utilisateur demande à retourner au menu principal

		EXEC_LOOP

	else # Si l'utilisateur à exécuter ladn-cli avec une option

		EXEC_NOOPTIONS

	fi

fi

if [ -n "$USER" ]; then # Si exécution par un utilisateur alors...

	if [ "$USER" = "root" ]; then # Si l'utilisateur est root alors exécuter le menu pricipal

		EXEC_MENU_MAIN

		if [ -n "$CLI_MENU" ]; then # Si l'utilisateur à effectuer une sélection non vide alors...

			if [ "$CLI_MENU" = "1" ]; then # 1 - ladn-OS

				EXEC_MENU_1
				SCRIPT_DIR="ladn-os"

				if [ -n "$CLI_MENU" ]; then

					if [ "$CLI_MENU" = "1" ]; then # ladn-OS KDE Splash installer

						SCRIPT_FILE="kde-splash.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "2" ]; then # ladn-OS Plymouth Splash installer

						SCRIPT_FILE="plymouth-splash.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "R" ]; then # Si l'utilisateur veut revenir au menu principal

						EXEC_BACK

					elif [ "$CLI_MENU" = "E" ]; then # Si l'utilisateur veut quitter

						EXEC_QUIT

					fi

				fi

			elif [ "$CLI_MENU" = "2" ]; then # 2 - Personalisation

				EXEC_UNAVAILABLE

			elif [ "$CLI_MENU" = "3" ]; then # 3 - Pilotes

				EXEC_MENU_3
				SCRIPT_DIR="drivers"

				if [ -n "$CLI_MENU" ]; then # Si l'utilisateur à effectuer une sélection non vide alors...

					if [ "$CLI_MENU" = "1" ]; then # 1 -  Brother Printer Installer

						SCRIPT_FILE="brother.sh"
						EXEC_ENGINE="bash"
						EXEC_INST

					elif [ "$CLI_MENU" = "2" ]; then # 2 - Canon ScanGear

						SCRIPT_FILE="canon_scangear.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "3" ]; then # 3 - Epson Scan2

						EXEC_UNAVAILABLE

					elif [ "$CLI_MENU" = "R" ]; then # Si l'utilisateur veut revenir au menu principal

						EXEC_BACK

					elif [ "$CLI_MENU" = "E" ]; then # Si l'utilisateur veut quitter

						EXEC_QUIT

					fi

				fi

			elif [ "$CLI_MENU" = "4" ]; then # 4 - Logiciels

				EXEC_MENU_4
				SCRIPT_DIR="softwares"

				if [ -n "$CLI_MENU" ]; then # Si l'utilisateur à effectuer une sélection non vide alors...

					if [ "$CLI_MENU" = "1" ]; then # 1 - Brave

						SCRIPT_FILE="brave.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "2" ]; then # 2 - Skype

						SCRIPT_FILE="skype.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "3" ]; then # 3 - TeamViewer

						SCRIPT_FILE="teamviewer.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "4" ]; then # 4 - OnlyOffice

						SCRIPT_FILE="onlyoffice.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "5" ]; then # 5 - Nextcloud Sync

						SCRIPT_FILE="nextcloud-sync.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "6" ]; then # 6 - OpenConcerto

						SCRIPT_FILE="openconcerto.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "R" ]; then # Si l'utilisateur veut revenir au menu principal

						EXEC_BACK

					elif [ "$CLI_MENU" = "E" ]; then # Si l'utilisateur veut quitter

						EXEC_QUIT

					fi

				fi

			elif [ "$CLI_MENU" = "5" ]; then # 5 - Configuration

				EXEC_MENU_5
				SCRIPT_DIR="configuration"

				if [ -n "$CLI_MENU" ]; then # Si l'utilisateur à effectuer une sélection non vide alors...

					if [ "$CLI_MENU" = "1" ]; then # 1 - LADN Repo

						SCRIPT_FILE="ladn-repository.sh"
						EXEC_ENGINE="sh"
						EXEC_INST

					elif [ "$CLI_MENU" = "R" ]; then # Si l'utilisateur veut revenir au menu principal

						EXEC_BACK

					elif [ "$CLI_MENU" = "E" ]; then # Si l'utilisateur veut quitter

						EXEC_QUIT

					fi

				fi

			elif [ "$CLI_MENU" = "E" ]; then # Si l'utilisateur veut quitter

				EXEC_QUIT

			fi

		fi

	else EXEC_NOROOT # Si pas root

	fi

else EXEC_ERR1 # Si utilisateur null

fi
