#!/bin/sh

PROG="/share/CACHEDEV1_DATA/ecoDMS/scanslavic.sh"
PIDFILE="/var/run/ocr_watch_wrapper.pid"
LOGTAG="ocrwatch"
MONITORDIR="/share/CACHEDEV1_DATA/ecoDMS/ScanInput/HR"

# Funktion: Daemon sauber beenden
cleanup() {
    if [ -f "$PIDFILE" ]; then
        PID=$(cat "$PIDFILE")
		# Finde auch den inotifywaid process
		notpid=`ps ax | grep inotifywait | grep "$MONITORDIR" | awk '{ print $1 }'`
		for killpid in "$PID" "$notpid"; do
		  if kill -0 "$killpid" 2>/dev/null; then
            echo "$LOGTAG: stopping daemon (PID $killpid)"
            kill "$killpid"
            # Warte maximal 5 Sekunden auf sauberes Beenden
            for i in 1 2 3 4 5; do
                kill -0 "$killpid" 2>/dev/null || break
                sleep 1
            done
            # Falls immer noch läuft, hart beenden
            kill -0 "$killpid" 2>/dev/null && kill -9 "$killpid" 2>/dev/null || true
          fi
		done
        rm -f "$PIDFILE"
    fi
}

# Funktion: Daemon starten
start_daemon() {
    # Bereits läuft?
    if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
        echo "$LOGTAG: already running (PID $(cat "$PIDFILE"))"
        return 0
    fi
    
    # Alte PID-Datei aufräumen
    rm -f "$PIDFILE"
    
    echo "$LOGTAG: starting daemon"
    
    # Starte im Hintergrund mit nohup und Umleitung
    # WICHTIG: Das Skript muss sich SELBST daemonisieren!
    nohup "$PROG" >/dev/null 2>&1 &
    DAEMON_PID=$!
    
    # Warte kurz und prüfe, ob es wirklich läuft
    sleep 2
    if kill -0 "$DAEMON_PID" 2>/dev/null; then
        echo "$DAEMON_PID" > "$PIDFILE"
        echo "$LOGTAG: started successfully (PID $DAEMON_PID)"
        return 0
    else
        echo "$LOGTAG: failed to start daemon"
        return 1
    fi
}

# Haupt-Start-Funktion
start() {
    start_daemon
}

# Haupt-Stop-Funktion
stop() {
    cleanup
}

# Status prüfen
status() {
    if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
        echo "$LOGTAG: running (PID $(cat "$PIDFILE"))"
        # Zeige auch die Kind-Prozesse (inotifywait)
        ps | grep -E "ocr_watch|inotifywait" | grep "$MONITORDIR" | grep -v grep
        return 0
    else
        echo "$LOGTAG: not running"
        return 1
    fi
}

case "$1" in
    start)   start ;;
    stop)    stop ;;
    restart) stop; sleep 2; start ;;
    status)  status ;;
    *) echo "Usage: $0 {start|stop|restart|status}"; exit 1 ;;
esac

