#!/usr/bin/env bash
set -e

ROOT="/Users/Shared/hermes-knowledge-engine"
VENV="$ROOT/.venv"
LOGS="$ROOT/logs"

API_PID="$ROOT/.api.pid"
MCP_PID="$ROOT/.mcp.pid"

API_CMD="$VENV/bin/uvicorn main:app --host 0.0.0.0 --port 8088 --reload"
MCP_CMD="$VENV/bin/python mcp_server.py"

cd "$ROOT"
mkdir -p "$LOGS"

start_api() {
  if [ -f "$API_PID" ] && kill -0 "$(cat "$API_PID")" 2>/dev/null; then
    echo "API already running: $(cat "$API_PID")"
    return
  fi

  nohup $API_CMD > "$LOGS/api.log" 2>&1 &
  echo $! > "$API_PID"
  echo "API started: $(cat "$API_PID")"
}

stop_api() {
  if [ -f "$API_PID" ]; then
    kill "$(cat "$API_PID")" 2>/dev/null || true
    rm -f "$API_PID"
    echo "API stopped"
  else
    echo "API not running"
  fi
}

start_mcp() {
  if [ -f "$MCP_PID" ] && kill -0 "$(cat "$MCP_PID")" 2>/dev/null; then
    echo "MCP already running: $(cat "$MCP_PID")"
    return
  fi

  nohup $MCP_CMD > "$LOGS/mcp.log" 2>&1 &
  echo $! > "$MCP_PID"
  echo "MCP started: $(cat "$MCP_PID")"
}

stop_mcp() {
  if [ -f "$MCP_PID" ]; then
    kill "$(cat "$MCP_PID")" 2>/dev/null || true
    rm -f "$MCP_PID"
    echo "MCP stopped"
  else
    echo "MCP not running"
  fi
}

status() {
  echo "Memory Cortex status"

  if [ -f "$API_PID" ] && kill -0 "$(cat "$API_PID")" 2>/dev/null; then
    echo "API: running ($(cat "$API_PID"))"
  else
    echo "API: stopped"
  fi

  if [ -f "$MCP_PID" ] && kill -0 "$(cat "$MCP_PID")" 2>/dev/null; then
    echo "MCP: running ($(cat "$MCP_PID"))"
  else
    echo "MCP: stopped"
  fi
}

case "$1" in
  start)
    start_api
    start_mcp
    ;;
  stop)
    stop_mcp
    stop_api
    ;;
  restart|reload)
    stop_mcp
    stop_api
    sleep 1
    start_api
    start_mcp
    ;;
  start-api)
    start_api
    ;;
  stop-api)
    stop_api
    ;;
  restart-api|reload-api)
    stop_api
    sleep 1
    start_api
    ;;
  start-mcp)
    start_mcp
    ;;
  stop-mcp)
    stop_mcp
    ;;
  restart-mcp|reload-mcp)
    stop_mcp
    sleep 1
    start_mcp
    ;;
  status)
    status
    ;;
  logs-api)
    tail -f "$LOGS/api.log"
    ;;
  logs-mcp)
    tail -f "$LOGS/mcp.log"
    ;;
  *)
    echo "Usage: cortexctl {start|stop|restart|reload|status|start-api|stop-api|restart-api|start-mcp|stop-mcp|restart-mcp|logs-api|logs-mcp}"
    exit 1
    ;;
esac
