#!/usr/bin/env bash
# Desk REST control · 127.0.0.1:18772 · cook/scar/forensics/detection/links
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
OUT="$ROOT/out"
PIDF="$OUT/desk-rest.pid"
LOG="$OUT/desk-rest.log"
PORT="${DESK_REST_PORT:-18772}"
PY="$ROOT/Build/desk-rest.py"
export XROOT="$ROOT"
export SUDO_PASS="${SUDO_PASS:-mememe}"

do_stop() {
  if [[ -f "$PIDF" ]]; then
    kill "$(cat "$PIDF")" 2>/dev/null || true
    rm -f "$PIDF"
  fi
  # free port if orphan holds it
  if command -v fuser >/dev/null 2>&1; then
    fuser -k "${PORT}/tcp" 2>/dev/null || true
  fi
}

do_start() {
  mkdir -p "$OUT"
  if [[ -f "$PIDF" ]] && kill -0 "$(cat "$PIDF")" 2>/dev/null; then
    echo "already up pid=$(cat "$PIDF") http://127.0.0.1:${PORT}/"
    return 0
  fi
  nohup python3 "$PY" >>"$LOG" 2>&1 &
  echo $! >"$PIDF"
  sleep 0.45
  echo "desk-rest up pid=$(cat "$PIDF") http://127.0.0.1:${PORT}/"
}

cmd="${1:-status}"
case "$cmd" in
  start|up) do_start ;;
  stop|down)
    do_stop
    echo "desk-rest down"
    ;;
  restart|reload)
    do_stop
    sleep 0.25
    do_start
    ;;
  status|st)
    if [[ -f "$PIDF" ]] && kill -0 "$(cat "$PIDF")" 2>/dev/null; then
      echo "up pid=$(cat "$PIDF") http://127.0.0.1:${PORT}/"
      curl -sS --max-time 3 "http://127.0.0.1:${PORT}/status" | head -c 900 || true
      echo
    else
      echo "down"
    fi
    ;;
  *)
    echo "desk-rest.sh start|stop|restart|status"
    echo "GET  /status /memory /api /scar /cook /forensics /detection /links /bsky /ports"
    echo "POST /cook  /scar/check  /links/check"
    ;;
esac
