#!/bin/sh

# ---------------------------------------------------------
# start-stop-status commands for Synology NAS (Merged Installer)
# Part of Workshop-Net NETMAN 6 - Merged Installer
# 
# Copyright M. Rothschink, AxoNet Software GmbH 2018-2025
# Version 3.1   04.05.2026 Modified for merged asa-netman + NGI services
# ---------------------------------------------------------

if [ -z "$SYNOPKG_PKGDEST" ]
then
   SYNOPKG_PKGDEST=/var/packages/asanetwork-Manager/target/
fi
if [ -z "$SYNOPKG_PKGNAME" ]
then
   export SYNOPKG_PKGNAME="asanetwork-Manager"
fi

PID1=0
PID2=0
DESC1="NETMAN Service"
DESC2="NGI Service"
PID_FILE1="/var/packages/${SYNOPKG_PKGNAME}/tmp/asa-netman.pid"
PID_FILE2="/var/packages/${SYNOPKG_PKGNAME}/tmp/ngi.pid"
LOG1=/var/packages/${SYNOPKG_PKGNAME}/var/log/netman-start-stop.log
LOG2=/var/packages/${SYNOPKG_PKGNAME}/var/log/ngi-start-stop.log

mkdir -p /var/packages/${SYNOPKG_PKGNAME}/var/log

logrotate /var/packages/${SYNOPKG_PKGNAME}/scripts/start-stop.logrotate 2>/dev/null || true

log()
{
    echo -e `date +"%Y/%m/%d %T"` $* >> ${LOG1}
    echo -e $*
}

logNewLine()
{
    echo `whoami`
    echo "" >> ${LOG1}
    echo ""
    log $*
}

usage()
{
    log Usage
    log "    $0 (start|stop|restart|status)"
    exit 1
}

start()
{
    status
    if [ $? = 0 ]
    then
        logNewLine "Starting ${DESC1}"
		CWD=`pwd`
		cd ${SYNOPKG_PKGDEST}
		log `pwd`
		
        ${SYNOPKG_PKGDEST}/Netman.Net.Service >> ${LOG1} &
        PID1=$!
        echo $PID1 > ${PID_FILE1}
        
        logNewLine "Starting ${DESC2}"
        ${SYNOPKG_PKGDEST}/NGI >> ${LOG2} &
        PID2=$!
        echo $PID2 > ${PID_FILE2}
		
		cd ${CWD}
        status
    fi
}

stop()
{
    status
    if [ $? = 1 ] || [ -f "$PID_FILE1" ] || [ -f "$PID_FILE2" ]
    then
        logNewLine "Stopping services"
        
        # Stop NETMAN
        if [ -f "$PID_FILE1" ]; then
            PID1=$(cat "${PID_FILE1}")
            kill ${PID1} 2>/dev/null
            rm -f "$PID_FILE1"
            log "Stopped ${DESC1}"
        fi
        
        sleep 5
        
        # Stop NGI
        if [ -f "$PID_FILE2" ]; then
            PID2=$(cat "${PID_FILE2}")
            kill ${PID2} 2>/dev/null
            rm -f "$PID_FILE2"
            log "Stopped ${DESC2}"
        fi
        
        status
    else
        log "Nothing to stop"
    fi
}

restart()
{
    Log "restart()"
    stop
    sleep 5
    logNewLine "Restarting services"
    start
}

# return 1 if running, otherwise 0
status()
{
    RUNNING=0
    
    # Check NETMAN process
    if [ -f "$PID_FILE1" ]; then
        PID1=$(cat "${PID_FILE1}")
        PS="$(ps waux| grep ${PID1} | grep -v grep)"
		if [ -n "$PS" ]
		then
            log "${DESC1} is running with PID=${PID1}"
            RUNNING=1
        else
            log "${DESC1} NOT running, removing invalid PID file"
            rm -f ${PID_FILE1}
        fi
    elif ps waux | grep "Netman.Net.Service" | grep -v grep > /dev/null; then
        log "${DESC1} is running (no PID file)"
        RUNNING=1
    else
        log "${DESC1} is NOT running"
    fi
    
    # Check NGI process
    if [ -f "$PID_FILE2" ]; then
        PID2=$(cat "${PID_FILE2}")
        PS="$(ps waux| grep ${PID2} | grep -v grep)"
		if [ -n "$PS" ]
		then
            log "${DESC2} is running with PID=${PID2}"
            RUNNING=1
        else
            log "${DESC2} NOT running, removing invalid PID file"
            rm -f ${PID_FILE2}
        fi
    elif ps waux | grep "NGI" | grep -v grep > /dev/null; then
        log "${DESC2} is running (no PID file)"
        RUNNING=1
    else
        log "${DESC2} is NOT running"
    fi
    
    return ${RUNNING}
}


case $1 in
   "start")
           logNewLine "---- start ----"
           start
           exit $(( ! $? ))
           ;;
   "stop")
           logNewLine "---- stop ----"
           stop
           exit $?
           ;;
   "restart")
           logNewLine "---- restart ----"
           restart
           exit $?
           ;;
   "status")
           status
           exit $(( ! $? ))
           ;;
    "prestart")
            exit 0
            ;;
    "prestop")
            exit 0
            ;;
   *)
           usage
           ;;
esac
