#!/usr/bin/env bash
#
# mock-server.sh
#
# Start a simple HTTP server for testing crawl functionality.
# Serves static files from tests/fixtures/mock-server/
#
# Usage:
#   # Start server in background, get PID:
#   MOCK_PID=$(bash scripts/lib/mock-server.sh start)
#
#   # Stop server:
#   bash scripts/lib/mock-server.sh stop $MOCK_PID
#
#   # Wait for server to be ready:
#   bash scripts/lib/mock-server.sh wait
#

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
MOCK_SERVER_DIR="$REPO_ROOT/tests/fixtures/mock-server"
PORT="${MOCK_SERVER_PORT:-8765}"

start_server() {
    # Start Python HTTP server in background
    cd "$MOCK_SERVER_DIR"
    python3 -m http.server "$PORT" --bind 127.0.0.1 >/dev/null 2>&1 &
    local pid=$!
    echo "$pid"
}

stop_server() {
    local pid="$1"
    if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
        kill "$pid" 2>/dev/null || true
        wait "$pid" 2>/dev/null || true
    fi
}

wait_for_server() {
    local max_attempts=30
    local attempt=0
    while [ $attempt -lt $max_attempts ]; do
        if curl -s "http://127.0.0.1:$PORT/" >/dev/null 2>&1; then
            return 0
        fi
        attempt=$((attempt + 1))
        sleep 0.1
    done
    echo "Error: Mock server failed to start on port $PORT" >&2
    return 1
}

case "${1:-start}" in
    start)
        start_server
        ;;
    stop)
        stop_server "${2:-}"
        ;;
    wait)
        wait_for_server
        ;;
    *)
        echo "Usage: $0 {start|stop|wait}" >&2
        exit 1
        ;;
esac
