#!/usr/bin/env bash
# NY-CLI v6.0.0 - Terminal Anime Streaming Client
# https://github.com/AnjishnuSengupta/ny-cli

set -e

# Get script directory (follow symlinks)
SOURCE="${BASH_SOURCE[0]}"
while [ -L "$SOURCE" ]; do
    DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
    SOURCE="$(readlink "$SOURCE")"
    [[ "$SOURCE" != /* ]] && SOURCE="$DIR/$SOURCE"
done
SCRIPT_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"

# Check if backend is already running
check_backend() {
    # Check if port 3000 is responding and it's our backend
    curl -sf --connect-timeout 1 "http://127.0.0.1:3000/" 2>/dev/null | grep -q '"status":"ok"' && return 0
    return 1
}

# Start backend server if not running
start_backend() {
    if check_backend; then
        return 0
    fi
    
    # Start backend in background
    node "$SCRIPT_DIR/backend.mjs" > "$SCRIPT_DIR/.ny-cli-backend.log" 2>&1 &
    BACKEND_PID=$!
    
    # Wait for backend to be ready (max 8 seconds)
    for i in $(seq 1 80); do
        if check_backend; then
            return 0
        fi
        sleep 0.1
    done
    
    echo "Warning: Backend may not be ready" >&2
}

# Stop backend on exit
cleanup() {
    if [ -n "$BACKEND_PID" ]; then
        kill $BACKEND_PID 2>/dev/null || true
    fi
}

trap cleanup EXIT

# Start backend
start_backend

# Run CLI based on available runtime
if command -v bun >/dev/null 2>&1; then
    # Use Bun for best experience
    exec bun run "$SCRIPT_DIR/cli-terminal.tsx" "$@"
else
    # Fall back to Node.js
    exec node "$SCRIPT_DIR/cli-terminal-fallback.mjs" "$@"
fi
