#!/bin/bash

source .fonctions	# Charge les fonctions génériques habituellement utilisées dans le script

CLEAN_SETUP () {
# Nettoyage des résidus d'installation non pris en charge par le script remove.
# Pas de nettoyage supplémentaire nécessaire ici...
	echo ""
}
TRAP_ON	# Active trap pour arrêter le script si une erreur est détectée.

# Retrieve arguments
domain=$YNH_APP_ARG_DOMAIN
path=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN
is_public=$YNH_APP_ARG_IS_PUBLIC

app=$YNH_APP_INSTANCE_NAME

# Source app helpers
source /usr/share/yunohost/helpers

script_dir=$PWD

# Vérifie que les variables ne sont pas vides.
CHECK_VAR "$app" "app name not set"
CHECK_VAR "$script_dir" "script_dir not set"


CHECK_USER "$admin"	# Vérifie la validité de l'user admin

CHECK_PATH	# Vérifie et corrige la syntaxe du path.
CHECK_DOMAINPATH	# Vérifie la disponibilité du path et du domaine.

CHECK_FINALPATH	# Vérifie que le dossier de destination n'est pas déjà utilisé.

# Modifie le domaine pour qu'il passe dans une regex
domain_regex=$(echo "$domain" | sed 's@-@.@g')
CHECK_VAR "$domain_regex" "domain_regex empty"

FIND_PORT 8080	# Cherche un port libre.

# Enregistre les infos dans la config YunoHost
ynh_app_setting_set $app admin $admin
ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app is_public $is_public
ynh_app_setting_set $app port $port


# Créer le repertoire de destination et stocke son emplacement.
ynh_app_setting_set $app final_path $final_path

sudo git clone https://framagit.org/luc/lstu.git $final_path	# Télécharge la source, décompresse et copie dans $final_path

# Copie le fichier de config nginx
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf


# Installation de perlmagick, interface perl pour imagemagick et de carton, gestionnaire de dépendances perl
sudo apt-get update
sudo apt-get install carton perlmagick -qy

## Copie et configuration du fichier de conf.
sudo cp ../conf/lstu.conf.template "$final_path/lstu.conf"
sudo sed -i "s@__DOMAIN__@$domain@g" "$final_path/lstu.conf"
sudo sed -i "s@__PATH__@$path@g" "$final_path/lstu.conf"
sudo sed -i "s@__PORT__@$port@g" "$final_path/lstu.conf"


codename=$(lsb_release -a 2>/dev/null | grep Codename | cut -f 2)
CHECK_VAR "$codename" "codename empty"
ynh_app_setting_set $app codename $codename
sudo cp "$final_path/utilities/lstu.default" /etc/default/lstu

	sudo cp ../conf/lstu.service /etc/systemd/system/lstu.service
	sudo chown root: /etc/systemd/system/lstu.service
	sudo sed -i "s@__FINALPATH__@$final_path/@g" /etc/systemd/system/lstu.service
	## Démarrage auto du service
	sudo systemctl enable lstu.service


# Installation de lstu via carton
sudo mkdir -p /var/log/$app/
cd $final_path
sudo carton install 2>&1 | sudo tee -a "/var/log/$app/setup_carton.log"

# Configure le path du dossier perl en fonction de l'architecture système
arch_dir=$(ls -1 $final_path/local/lib/perl5/ | grep linux-gnu)
if [ "$?" -ne 0 ]
then
    echo "Impossible de trouver le dossier relatif à l'architecture système." | sudo tee -a "/var/log/$app/setup_carton.log"
	false
fi
CHECK_VAR "$arch_dir" "arch_dir empty"
sudo sed -i "s@__ARCHDIR__@$arch_dir@g" "$final_path/script/lstu"

# Change variables in nginx configuration
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
sudo sed -i "s@__PORT__@$port@g" /etc/nginx/conf.d/$domain.d/$app.conf

# Make app public or private
ynh_app_setting_set $app skipped_uris "/"
if [ "$is_public" = "No" ];
then	# Si l'app est privée, seul le visionnage des images reste public
	if [ "$path" == "/" ]; then
	    path=""	# Si path correspond à la racine, supprime le / pour éviter une erreur de la regex.
	fi
	ynh_app_setting_set $app protected_regex "$domain_regex$path/stats$","$domain_regex$path/manifest.webapp$","$domain_regex$path/$","$domain_regex$path/d/.*$","$domain_regex$path/m/.*$"
fi

# Making log symbolic link to /var/log
sudo touch /var/log/$app/production.log 
sudo chown www-data: /var/log/$app/production.log
sudo ln -s /var/log/$app/production.log "$final_path/log/production.log"

# Configure les droits d'accès au fichiers
sudo chown -R www-data: $final_path

# Start lutim
sudo service lstu start
# Set right permissions on new files created at first start
sudo chown -R www-data: "$final_path"


# Add lutim as a service
sudo yunohost service add lstu -l $final_path/log/production.log


# Recharge la configuration Nginx
sudo service nginx reload
# Régénère la configuration de SSOwat
sudo yunohost app ssowatconf