#!/usr/bin/env zsh
# llm-stop.sh — Tear down the LLM inference stack.
# Manual stop only. "Lightswitch OFF."
#
# Stops (in reverse order):
#   2. oMLX proxy     (:8090)
#   1. Primary model  (oMLX :8080)

source "$(dirname "$0")/llm.conf"

_stop_pid() {
  local label=$1 pid_file=$2 port=$3
  local pid=""

  if [[ -f "$pid_file" ]]; then
    pid=$(cat "$pid_file")
  fi

  if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then
    echo "$label: stopping PID $pid"
    kill "$pid"
    for i in $(seq 1 10); do
      kill -0 "$pid" 2>/dev/null || break
      sleep 1
    done
    kill -0 "$pid" 2>/dev/null && kill -9 "$pid" 2>/dev/null
  fi
  [[ -f "$pid_file" ]] && rm -f "$pid_file"

  # Final fallback: kill by port
  if [[ -n "$port" ]]; then
    local port_pid=$(lsof -ti tcp:$port 2>/dev/null)
    if [[ -n "$port_pid" ]]; then
      echo "$label: killing remaining process on :$port (PID $port_pid)"
      kill "$port_pid" 2>/dev/null
      sleep 1
      kill -0 "$port_pid" 2>/dev/null && kill -9 "$port_pid" 2>/dev/null
    fi
  fi
}

echo "╔══════════════════════════════════════════════╗"
echo "║  LLM Stack — Stopping                       ║"
echo "╚══════════════════════════════════════════════╝"
echo ""

# ── 2. oMLX proxy ────────────────────────────────────────────────────────────
_stop_pid "proxy" "$PROXY_PID" "$PROXY_PORT"
echo "proxy:     stopped"

# ── 1. Primary model ──────────────────────────────────────────────────────────
_stop_pid "primary" "$PRIMARY_PID" "$PRIMARY_PORT"
echo "primary:   stopped"

echo ""
echo "╔══════════════════════════════════════════════╗"
echo "║  Stack DOWN                                  ║"
echo "╚══════════════════════════════════════════════╝"
