#!/bin/bash
# Jalankan server Berita Acara Maintenance — mode daemon dengan auto-restart
cd "$(dirname "$0")"

PORT="${PORT:-8765}"
PIDFILE=".server.pid"
LOGFILE="server.log"
CHECK_INTERVAL=5

if [ ! -d node_modules ]; then
  echo "Menginstall dependencies..."
  npm install
fi

is_running() {
  [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null
}

kill_project_server() {
  pkill -f "$(pwd)/server.js" 2>/dev/null
  if command -v lsof >/dev/null 2>&1; then
    lsof -ti:"$PORT" 2>/dev/null | while read -r pid; do
      case "$(lsof -p "$pid" 2>/dev/null | awk 'NR==2{print $9}')" in
        *"$(pwd)"*) kill -9 "$pid" 2>/dev/null ;;
      esac
    done
  fi
}

stop_server() {
  local was_running=0
  if is_running; then
    was_running=1
    PID=$(cat "$PIDFILE")
    echo "Menghentikan server (PID $PID)..."
    kill "$PID" 2>/dev/null
    for _ in $(seq 1 10); do
      kill -0 "$PID" 2>/dev/null || break
      sleep 0.5
    done
    kill -9 "$PID" 2>/dev/null
  fi
  kill_project_server
  rm -f "$PIDFILE"
  if [ "$was_running" = "1" ]; then
    echo "Server dihentikan."
  else
    echo "Server tidak berjalan."
  fi
}

status_server() {
  if is_running; then
    echo "Server aktif — PID $(cat "$PIDFILE") — http://localhost:$PORT"
    curl -sf "http://localhost:$PORT/api/health" 2>/dev/null && echo "" || echo "(health check gagal)"
  else
    echo "Server tidak berjalan."
    exit 1
  fi
}

start_daemon() {
  if is_running; then
    echo "Server sudah berjalan (PID $(cat "$PIDFILE")) — http://localhost:$PORT"
    exit 0
  fi

  echo "Memulai server daemon — http://localhost:$PORT"
  echo "Log: $LOGFILE"
  echo "Hentikan: ./start.sh stop"

  nohup bash -c '
    while true; do
      echo "[$(date "+%Y-%m-%d %H:%M:%S")] Starting node server..." >> "'"$LOGFILE"'"
      node server.js >> "'"$LOGFILE"'" 2>&1
      EXIT=$?
      echo "[$(date "+%Y-%m-%d %H:%M:%S")] Server exited ($EXIT), restart in '"$CHECK_INTERVAL"'s..." >> "'"$LOGFILE"'"
      sleep '"$CHECK_INTERVAL"'
    done
  ' > /dev/null 2>&1 &

  echo $! > "$PIDFILE"
  sleep 1

  if curl -sf "http://localhost:$PORT/api/health" > /dev/null 2>&1; then
    echo "Server siap — PID $(cat "$PIDFILE")"
  else
    echo "Server starting... cek log: tail -f $LOGFILE"
  fi
}

case "${1:-start}" in
  stop)   stop_server ;;
  status) status_server ;;
  restart)
    stop_server
    sleep 1
    start_daemon
    ;;
  fg|dev)
    echo "Mode foreground — http://localhost:$PORT (Ctrl+C untuk stop)"
    node server.js
    ;;
  *)
    start_daemon
    ;;
esac