#!/bin/bash

doc_admin() {
    echo "    Pour plus d'information sur l'installation/configuration du serveur, se référer au manuel d'administration."
    echo "    ~~> docs/administrateurice.md"
}

DEPS=("ansible-playbook" "grep")

# Vérifier que les dépendances sont installées, des fois qu'une personne n'aurait pas lu la doc
for dep in ${DEPS[*]}; do
    which "$dep" > /dev/null
    if [[ $? != 0 ]]; then
        echo "ERREUR: La commande $dep n'existe pas dans mon \$PATH."
        echo "    Notre recette a besoin des programmes suivants: $DEPS"
        doc_admin
        exit 2
    fi
done

CMD="ANSIBLE_RETRY_FILES_ENABLED=0 ansible-playbook recette.yml"

REMOTE=false

for arg in "$@"; do
    if [[ $arg = "remote" ]]; then
	REMOTE=true
	CMD="$CMD -i hosts"
    fi
    if [[ $arg = "check" ]]; then
	CMD="$CMD --syntax-check"
    fi
    if [[ $arg = "debug" ]]; then
        CMD="$CMD -vvv"
    fi
done

if [[ $REMOTE = false ]]; then
    # Vérifier que la distribution est bien Debian buster, sinon on risque de tout casser
    grep "Debian GNU/Linux 10" /etc/issue > /dev/null
    if [[ $? != 0 ]]; then
        echo "ERREUR: Cette recette ne fonctionne que sur Debian 10 Buster! /etc/issue n'indique pas qu'on est sur buster."
        doc_admin
        exit 3
    fi

    # Sécurité pour empêcher une personne d'appliquer par erreur le playbook de ~fr sur son propre serveur
    # Si le hostname dans config.yml est configuré pour fr.tild3.org mais que /etc/hostname n'est pas "fr",
    # alors on ne fait rien... sauf bien sûr en mode remote.
    grep -E "^hostname:.*?fr.tild3.org.*?$" config.yml > /dev/null
    FR=$?
    
    cur_host="$(cat /etc/hostname)"
    if [[ "$cur_host" != "fr" ]] && [[ $FR = 0 ]]; then
        echo "ERREUR DE CONFIGURATION"
        echo "    Tu essayes d'appliquer la recette avec la configuration du serveur ~fr (hostname: fr.tild3.org), pourtant il semble que ce serveur n'est pas ~fr (/etc/hostname = $cur_host)."
        echo "    Pour configurer ton serveur de zéro, tu peux partir du fichier d'exemple config.default.yml."
        doc_admin
        exit 1
    fi
    
    # Vérifier qu'on exécute le playbook en root, sinon on a pas assez de privilèges et ça ne sert à rien!
    if [[ "$EUID" != 0 ]]; then
        echo "ERREUR: Ce script doit être exécuté en root si exécuté localement."
        echo "    Tu veux que je configure quoi pour toi si j'ai pas les permissions? ;)"
        exit 2
    fi
    
    CMD="$CMD --connection=local --inventory 127.0.0.1, --limit 127.0.0.1"
fi

eval $CMD
