#!/bin/sh
# vim: set ts=4 sw=4 sts=4 tw=0:
# vim: set expandtab:

### BEGIN INIT INFO
# Provides:          lufi
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts lufi with hypnotoad
# Description:       starts lufi with hypnotoad
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=script/lufi
NAME=lufi
DESC=lufi

if [ -f "/etc/default/lufi" ]
then
    . /etc/default/lufi
    if [ -z $LDIR ]
    then
        echo "LDIR variable is empty, please fill it in /etc/default/lufi"
        exit 0
    fi
    if [ -z $USER ]
    then
        echo "USER variable is empty, please fill it in /etc/default/lufi"
        exit 0
    fi
else
    echo "Missing /etc/default/lufi file"
    exit 0
fi

if [ ! -f "$LDIR$DAEMON" ]
then
    echo "Missing $LDIR$DAEMON file"
    exit 0
fi

set -e

. /lib/lsb/init-functions

do_start()
{
    # Return
    # 0 if daemon has been started
    # 1 if daemon was already running
    # 2 if daemon could not be started

    cd $LDIR
    su $USER -c "carton exec hypnotoad $DAEMON >/dev/null 2>&1"
    return "$?"
}

do_stop()
{
    # Return
    # 0 if daemon has been stopped
    # 1 if daemon was already stopped
    # 2 if daemon could not be stopped
    # other if a failure occurred

    cd $LDIR
    su $USER -c "carton exec hypnotoad -s $DAEMON >/dev/null 2>&1"
    return "$?"
}

do_status()
{
    cd $LDIR
    if [ -f "script/hypnotoad.pid" ]
    then
        pgrep -lf $DAEMON >/dev/null 2>&1
        if [ "$?" = "0" ]; then
            log_progress_msg "$NAME is running"
        else
            log_failure_msg "$NAME is NOT running but PID file exists"
        fi
    else
        log_failure_msg "$NAME is NOT running"
    fi
}

case "$1" in
    start)
        log_daemon_msg "Starting $NAME"
        cd $LDIR
        if [ -f "script/hypnotoad.pid" ]
        then
             pgrep -lf $DAEMON >/dev/null 2>&1
             if [ "$?" = "0" ]
             then
                 log_progress_msg "$NAME is already running. Unable to start."
                 log_end_msg 1;
             else
                 do_start
                 case "$?" in
                     0|1)
                         log_progress_msg "done"
                         log_end_msg 0
                         ;;
                     2)
                         log_failure_msg "failed"
                         log_end_msg 1
                         ;;
                 esac
             fi
        else
            do_start
            case "$?" in
                0|1)
                    log_progress_msg "done"
                    log_end_msg 0
                    ;;
                2)
                    log_failure_msg "failed"
                    log_end_msg 1
                    ;;
            esac
        fi
        ;;
    stop)
        log_daemon_msg "Stopping $NAME"
        cd $LDIR
        if [ -f "script/hypnotoad.pid" ]
        then
            pgrep -lf $DAEMON >/dev/null 2>&1
            if [ "$?" = "0" ]; then
                do_stop
                case "$?" in
                    0|1)
                        log_progress_msg "done"
                        log_end_msg 0
                        ;;
                    *)
                        log_failure_msg "failed"
                        log_end_msg 1
                        ;;
                esac
            else
                log_failure_msg "$NAME is NOT running. Unable to stop"
                log_end_msg 1
            fi
        else
            log_failure_msg "$NAME is NOT running. Unable to stop"
            log_end_msg 1
        fi
        ;;
    status)
        log_daemon_msg "Checking $NAME status"
        do_status
        log_end_msg 0
        ;;
    reload)
        log_daemon_msg "Reloading $NAME"
        do_start
        sleep 1
        case "$?" in
            0|1)
                log_progress_msg "done"
                log_end_msg 0
                ;;
            2)
                log_failure_msg "failed"
                log_end_msg 1
                ;;
        esac
        ;;
    restart)
        log_daemon_msg "Restarting $NAME"
        do_stop
        sleep 6
        do_start
        case "$?" in
            0|1)
                log_progress_msg "done"
                log_end_msg 0
                ;;
            2)
                log_failure_msg "failed";
                log_end_msg 1
                ;;
        esac
        ;;
    *)
        echo "Usage: $0 {start|stop|status|reload|restart}" >&2
        exit 3
        ;;
esac

exit 0
