#!/usr/bin/env bash
# Command dispatcher — sources modules on-demand per command
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/core"

TALENT_SCOUT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"

usage() {
  echo -e "${BOLD}Talent Scout — Orchestration${RESET}"
  echo ""
  echo "Usage: ./run [command]"
  echo ""
  echo "Commands:"
  echo "  start         Full startup: infra → build frontend → launch server"
  echo "  stop          Stop server + docker compose down"
  echo "  status        Health check all components"
  echo "  services      Show ML service status (LLM + CAPTCHA)"
  echo "  infra         Start only Docker containers (postgres, redis, mailpit)"
  echo "  build         Build frontend only"
  echo "  logs [svc]    Tail docker compose logs (optional: service name)"
  echo "  train         CAPTCHA model training (start/stop/status)"
  echo ""
  echo "For full dev cluster (API + UI + LLM + CAPTCHA + Tor): ./scripts/up"
  echo ""
}

COMMAND="${1:-start}"
shift || true

case "$COMMAND" in
  start)
    source "$SCRIPT_DIR/infra"
    source "$SCRIPT_DIR/build"
    infra_up
    build_frontend "${1:-}"
    log "Starting Talent Scout API on port ${API_PORT}..."
    exec bunx tsx "$TALENT_SCOUT_ROOT/src/index.ts" ui --port "$API_PORT"
    ;;
  stop)
    source "$SCRIPT_DIR/infra"
    infra_down
    ;;
  status)
    source "$SCRIPT_DIR/status"
    check_status
    ;;
  services)
    source "$SCRIPT_DIR/services"
    services_status
    ;;
  infra)
    source "$SCRIPT_DIR/infra"
    infra_up
    ;;
  build)
    source "$SCRIPT_DIR/build"
    build_frontend "--rebuild"
    ;;
  logs)
    docker compose -f "$TALENT_SCOUT_ROOT/docker-compose.yml" logs -f "$@"
    ;;
  train)
    source "$SCRIPT_DIR/train"
    ;;
  -h|--help|help)
    usage
    ;;
  *)
    err "Unknown command: $COMMAND"
    usage
    exit 1
    ;;
esac
