#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source /etc/ulibauto || exit 1
urequire debian service conf

function display_help() {
    uecho "$scriptname: installer le service

USAGE
    $scriptname [options]

OPTIONS
    -n, --name NAME
        Spécifier le nom du service
    -p, --port PORT
        Spécifier le port sur lequel doit écouter le serveur
    -d, --destdir DESTDIR
        Spécifier le répertoire d'installation. Par défaut, l'installation se
        fait dans le répertoire $DEFAULT_DESTDIR
    -s, --start
        Activer et démarrer le service après installation"
}

DEFAULT_DESTDIR=/opt/webpyapps

name=
port=
destdir=
owner=root:
mode=u=rwX,go=rX
overwrite_config=
enable=
start=
args=(
    --help '$exit_with display_help'
    -n:,--name: name=
    -p:,--port: port=
    -d:,--destdir: destdir=
    --overwrite-config overwrite_config=1
    -s,--start '$enable=1; start=1'
)
parse_args "$@"; set -- "${args[@]}"

[ -n "$name" ] || setx name=basename "$scriptdir"
[ -n "$destdir" ] || destdir="$DEFAULT_DESTDIR"
run_as_root -n "$name" ${port:+-p "$port"} \
            -d "$destdir" ${overwrite_config:+--overwrite-config} \
            ${start:+-s}
            "$@"

if service "$name" check; then
    estep "Arrêt du service"
    service "$name" stop
    start=1
fi

etitle "Copie des fichiers"
destdir="$destdir/$name"
mkdir -p "$destdir" || die
rsync -a \
      --exclude /server.conf --exclude /install-or-update.sh --exclude /.devel \
      "$scriptdir/" "$destdir"
eend

etitle "Vérification de la configuration"
if [ -n "$overwrite_config" -o ! -f "$destdir/server.conf" ]; then
    estep "Copie de la configuration initiale"
    cp "$scriptdir/server.conf" "$destdir"
    if [ -n "$port" ]; then
        estep "Configuration du port d'écoute $port"
        conf_enable "$destdir/server.conf" PORT="$port"
    fi
else
    enote "Refus d'écraser la configuration existante $destdir/server.conf"
fi
eend

etitle "Correction des permissions"
chown -R "$owner" "$destdir"
chmod -R "$mode" "$destdir"
eend

etitle "Configuration du service"
estep "Copie des fichiers init..."
if [ -d /etc/systemd/system ]; then
    estep "... /etc/systemd/system/$name.service"
    sed "\
s|@@destdir@@|$destdir|g
s|@@name@@|$name|g" "$destdir/lib/server.service" >"/etc/systemd/system/$name.service"
fi
if [ -n "$enable" ]; then
    estep "Activation du service"
    service_enable "$name"
fi
if [ -n "$start" ]; then
    estep "Démarrage du service"
    service "$name" start
fi
eend