#!/bin/bash

NAME=unifi
BASEDIR=/usr/lib/${NAME}

[ -f /etc/default/${NAME} ] && . /etc/default/${NAME}

DATADIR=${UNIFI_DATA_DIR:-/var/lib/$NAME}
LOGDIR=${UNIFI_LOG_DIR:-/var/log/$NAME}
CODEPATH=${BASEDIR}
RUNDIR=${UNIFI_RUN_DIR:-/var/run/$NAME}

for i in $(seq 1 10); do
    [ -z "$(pgrep -f ${CODEPATH}/lib/ace.jar)" ] && break
    # graceful shutdown
    [ $i -gt 1 ] && [ -d ${RUNDIR} ] && touch ${RUNDIR}/server.stop || true
    # savage shutdown
    [ $i -gt 7 ] && pkill -f ${CODEPATH}/lib/ace.jar || true
    sleep 1
done

service_ctrl() {
    if [ -d /run/systemd/system ]; then
        systemctl --system daemon-reload >/dev/null || true
        deb-systemd-invoke $2 $1.service >/dev/null || true
    elif which invoke-rc.d >/dev/null 2>&1; then
        invoke-rc.d $1 $2
    else
        /etc/init.d/$1 $2
    fi
}

systemd_setup() {
    local systemd_helper
    systemd_helper=/usr/bin/deb-systemd-helper
    if [ ! -x ${systemd_helper} ]; then
        return 0;
    fi

    ${systemd_helper} unmask ${NAME}.service >/dev/null || true
    if ${systemd_helper} --quiet was-enabled ${NAME}.service >/dev/null; then
        ${systemd_helper} enable ${NAME}.service >/dev/null || true
    else
        ${systemd_helper} update-state ${NAME}.service >/dev/null || true
    fi
}

UMASK=027
umask ${UMASK}

if [ "$1" = "configure" ] ; then
    UNIFI_USER=${UNIFI_USER:-unifi}
    FILE_MODE=$(printf '%x' $((0x7777 - 0x${UMASK} & 0x0666)))
    DIR_MODE=$(printf '%x' $((0x7777 - 0x${UMASK} & 0x0777)))

    if ! id ${UNIFI_USER} >/dev/null 2>&1; then
        adduser --system --home ${DATADIR} --no-create-home --group --disabled-password --quiet ${UNIFI_USER}
    fi
    UNIFI_GROUP=$(id -gn ${UNIFI_USER})

    [ -e ${DATADIR} ] || install -o ${UNIFI_USER} -g ${UNIFI_GROUP} -m ${DIR_MODE} -d ${DATADIR}
    [ -e ${LOGDIR} ] || install -o ${UNIFI_USER} -g ${UNIFI_GROUP} -m ${DIR_MODE} -d ${LOGDIR}
    [ -e ${RUNDIR} ] || install -o ${UNIFI_USER} -g ${UNIFI_GROUP} -m ${DIR_MODE} -d ${RUNDIR}

    chown -h ${UNIFI_USER}:${UNIFI_GROUP} ${DATADIR} ${LOGDIR} ${RUNDIR} && chown -RH ${UNIFI_USER}:${UNIFI_GROUP} ${DATADIR} ${LOGDIR} ${RUNDIR}

    ln -sf ${CODEPATH}/bin/unifi.init /etc/init.d/unifi
    update-rc.d unifi defaults 92 08
    ln -sf $(which mongod) ${CODEPATH}/bin/mongod

    rm -rf ${CODEPATH}/conf
fi

systemd_setup
service_ctrl ${NAME} start

exit 0
