#!/bin/sh
### BEGIN INIT INFO
# Provides:          jibo-skills-logd
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: UDP log daemon for Jibo Skills
### END INIT INFO

# Install path on robot:
#   /etc/init.d/jibo-skills-logd  (this file)
# and ensure executable: chmod +x /etc/init.d/jibo-skills-logd
# Enable (varies by distro):
#   update-rc.d jibo-skills-logd defaults
# or (BusyBox init): create symlink in /etc/rc.d/rcS.d/ or /etc/rc?.d/

PYTHON_BIN=${PYTHON_BIN:-/usr/bin/python}
DAEMON=${DAEMON:-/opt/jibo/Jibo/Skills/tools/robot/logd/jibo_logd.py}
PIDFILE=${PIDFILE:-/tmp/jibo-skills-logd.pid}
HOST=${JIBO_LOGD_HOST:-127.0.0.1}
PORT=${JIBO_LOGD_PORT:-15140}
LOGFILE=${JIBO_LOGD_FILE:-/tmp/jibo-skills.log}

start() {
  echo "Starting jibo-skills-logd"
  if [ -f "$PIDFILE" ]; then
    PID=$(cat "$PIDFILE" 2>/dev/null)
    if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
      echo "Already running (pid $PID)"
      return 0
    fi
  fi

  # best effort: ensure logfile dir exists
  mkdir -p "$(dirname "$LOGFILE")" 2>/dev/null

  "$PYTHON_BIN" "$DAEMON" --host "$HOST" --port "$PORT" --logfile "$LOGFILE" --daemonize --pidfile "$PIDFILE"
  sleep 1
  if [ -f "$PIDFILE" ]; then
    echo "Started (pid $(cat "$PIDFILE" 2>/dev/null))"
    return 0
  fi
  echo "Failed to start"
  return 1
}

stop() {
  echo "Stopping jibo-skills-logd"
  if [ ! -f "$PIDFILE" ]; then
    echo "Not running (no pidfile)"
    return 0
  fi
  PID=$(cat "$PIDFILE" 2>/dev/null)
  if [ -z "$PID" ]; then
    rm -f "$PIDFILE"
    return 0
  fi
  kill "$PID" 2>/dev/null
  sleep 1
  kill -9 "$PID" 2>/dev/null
  rm -f "$PIDFILE"
  echo "Stopped"
  return 0
}

status() {
  if [ -f "$PIDFILE" ]; then
    PID=$(cat "$PIDFILE" 2>/dev/null)
    if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
      echo "Running (pid $PID)"
      return 0
    fi
  fi
  echo "Not running"
  return 3
}

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

exit $?
