#!/bin/bash
#
# License: Copyright 2019 SpinetiX. This file is licensed
#          under the terms of the GNU General Public License version 2.
#          This program is licensed "as is" without any warranty of any
#          kind, whether express or implied.
#
# Copyright 1999-2003 MontaVista Software, Inc.
# Copyright 2002, 2003, 2004 Sony Corporation
# Copyright 2002, 2003, 2004 Matsushita Electric Industrial Co., Ltd.
#
### BEGIN INIT INFO
# Required-Start:
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Starting/stopping SpinetiX's input events manager
# Description: Starting/stopping SpinetiX's input events manager
### END INIT INFO

# Init script information
NAME=spxevents
DESC="SPX input events manager"

# Individual Daemon information
DAEMON=/usr/sbin/spxevents
ARGS=
BASENAME=spxevents

# Load init script configuration
[ -f /etc/default/$NAME ] && . /etc/default/$NAME

# Source the init script functions
. /etc/init.d/functions

# Verify daemons are installed
if [ ! -x $DAEMON -a "$1" != "stop" ]; then
    echo -n "Not starting $DESC $NAME, $DAEMON not installed"
    warning
    echo
    exit 0
fi

start() {
    local RET ERROR=
    local n
    local START_RECOVERY
    local START_FACTORY_RESET

    if [ -d /usr/share/spxrecovery ]; then
        # in recovery mode
        START_RECOVERY="/etc/init.d/bootcount-reset.sh reset 100 && reboot"
    else
        START_RECOVERY="/etc/init.d/bootcount noreset && bootcount write 100 && reboot"
    fi

    if [ "$HOSTTYPE" = "arm" ]; then
        START_FACTORY_RESET="fw_setenv fwconfig reset && reboot"
    else
        if [ -d /usr/share/spxrecovery ]; then
            # in recovery mode
            START_FACTORY_RESET="/usr/libexec/spxrecovery/grub-env-wrapper set fwconfig=reset && reboot"
        else
            START_FACTORY_RESET="grub-editenv /var/lib/spinetix/ldrenv/boot/grub.env set fwconfig=reset && reboot"
        fi
    fi

    echo -n "Starting $DESC: "

    echo -n "$NAME "
    $DAEMON $ARGS -C "$START_RECOVERY" -R "$START_FACTORY_RESET"
    RET=$?
    if [ $RET -eq 0 ]; then
        success; echo
    else
        failure; echo
    return 1
    fi

    return 0
}

stop () {
    local RET ERROR=

    echo -n "Stopping $DESC: $NAME "
    $DAEMON -k
    RET=$?
    if [ $RET -eq 0 ]; then
        success; echo
    else
        failure; echo
        return 1
    fi

    return 0
}

restart() {
    local RET

    echo "Restarting $DESC..."
    stop
    start
    RET=$?

    return $RET
}

condrestart() {
    local RET

    pidofproc $BASENAME >/dev/null
    RET=$?
    if [ $RET -eq 0 ]; then
        restart
        RET=$?
    else
        RET=1
    fi

    return $RET
}

reload() {
    local RET pid

    # spxevents has no support for HUP, so just restart
    condrestart
}

forcereload() {
    local RET

    reload
    RET=$?
    if [ $RET -ne 0 ]; then
        restart
        RET=$?
    fi

    return $RET
}

parse() {
    case "$1" in
        start)
            start
            return $?
            ;;
        stop)
            stop
            return $?
            ;;
        restart)
            restart
            return $?
            ;;
        condrestart|try-restart)
            condrestart
            return $?
            ;;
        reload)
            reload
            return $?
            ;;
        force-reload)
            forcereload
            return $?
            ;;
        status)
            status $BASENAME
            return $?
            ;;
        *)
            echo "Usage: $NAME " \
                "{start|stop|restart|condrestart|reload|force-reload|status}" >&2
            ;;
    esac

    return 1
}

parse $@
