#!/bin/bash
# SHIELD/ATLAS — Local Tactical Node
# Run this on your laptop to start the full platform locally.
# Your SDR antenna and mic plug directly into this machine.
#
# Usage:
#   chmod +x start-local.sh
#   ./start-local.sh
#
# Prerequisites:
#   - Node.js 18+ installed (https://nodejs.org)
#   - Python 3.9+ installed (for sensor bridge)
#   - pip install pyrtlsdr numpy requests sounddevice
#
# Hardware:
#   - NooElec NESDR Smart v5 (USB) — RF scanning
#   - Fifine K669B (USB) — Acoustic detection
#   - ESP32 nodes connect over WiFi to this machine
#
# Copyright 2026 Integrated Security Solutions (ISS) — SDVOSB
# CAGE: 9VKK3 | UEI: C7YDV3P8EHL7

set -e

echo ""
echo "============================================================"
echo "  SHIELD/ATLAS — Local Tactical Node"
echo "  Integrated Security Solutions (ISS) — SDVOSB"
echo "============================================================"
echo ""

CLOUD_URL="${CLOUD_URL:-https://secureassure.app}"
LOCAL_PORT="${LOCAL_PORT:-5000}"

if ! command -v node &> /dev/null; then
    echo "[ERROR] Node.js is not installed."
    echo "        Download from: https://nodejs.org"
    exit 1
fi

NODE_VER=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VER" -lt 18 ]; then
    echo "[ERROR] Node.js 18+ required. You have $(node -v)"
    exit 1
fi

echo "[1/4] Starting local SHIELD/ATLAS server on port $LOCAL_PORT..."
echo "       COP will be at: http://localhost:$LOCAL_PORT/cop"
echo "       Dashboard at:   http://localhost:$LOCAL_PORT/cram-dashboard"
echo ""

if [ -f "server_dist/index.js" ]; then
    echo "[INFO] Using pre-built server (server_dist/index.js)"
    NODE_ENV=production PORT=$LOCAL_PORT node server_dist/index.js &
    SERVER_PID=$!
elif [ -f "package.json" ]; then
    echo "[INFO] Using development server"
    PORT=$LOCAL_PORT npm run server:dev &
    SERVER_PID=$!
else
    echo "[ERROR] No server files found. Make sure you're in the SHIELD/ATLAS directory."
    exit 1
fi

sleep 3
echo ""
echo "[2/4] Server running (PID: $SERVER_PID)"

echo "[3/4] Checking for hardware..."

if command -v python3 &> /dev/null; then
    PYTHON=python3
elif command -v python &> /dev/null; then
    PYTHON=python
else
    echo "       [WARN] Python not found — sensor bridge will not start"
    echo "       Install Python 3.9+ for hardware sensor support"
    PYTHON=""
fi

if [ -n "$PYTHON" ] && [ -f "sensor-bridge.py" ]; then
    echo "       Starting sensor bridge (SDR + Mic → local server)..."
    $PYTHON sensor-bridge.py --server http://localhost:$LOCAL_PORT --scan &
    BRIDGE_PID=$!
    echo "       Sensor bridge running (PID: $BRIDGE_PID)"
elif [ -n "$PYTHON" ]; then
    echo "       [INFO] sensor-bridge.py not found in current directory"
    echo "       Download from: $CLOUD_URL/downloads/sensor-bridge.py"
fi

echo ""
echo "[4/4] SHIELD/ATLAS LOCAL NODE ACTIVE"
echo ""
echo "============================================================"
echo "  LOCAL:  http://localhost:$LOCAL_PORT/cop"
echo "  CLOUD:  $CLOUD_URL/cop"
echo ""
echo "  Your hardware feeds THIS machine directly."
echo "  Open the COP in your browser now."
echo ""
echo "  Press Ctrl+C to stop."
echo "============================================================"
echo ""

cleanup() {
    echo ""
    echo "[SHUTDOWN] Stopping SHIELD/ATLAS..."
    kill $SERVER_PID 2>/dev/null || true
    [ -n "$BRIDGE_PID" ] && kill $BRIDGE_PID 2>/dev/null || true
    echo "[SHUTDOWN] Complete."
    exit 0
}

trap cleanup INT TERM
wait $SERVER_PID
