#!/bin/bash
# Build Archipelago backend binary for Debian Linux

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BACKEND_DIR="$PROJECT_ROOT/core/archipelago"
OUTPUT_DIR="$SCRIPT_DIR/../build/backend"

echo "🔨 Building Archipelago backend..."
echo "   Source: $BACKEND_DIR"
echo "   Output: $OUTPUT_DIR"
echo ""

# Create output directory
mkdir -p "$OUTPUT_DIR"

# Check if we should use Docker
USE_DOCKER=false
if [[ "$OSTYPE" == "darwin"* ]]; then
    USE_DOCKER=true
    echo "🍎 macOS detected - using Docker for Linux build"
elif ! command -v rustc >/dev/null 2>&1; then
    USE_DOCKER=true
    echo "⚠️  Rust not found - using Docker"
fi

if [ "$USE_DOCKER" = true ]; then
    echo "🐳 Building in Docker container..."
    docker run --rm \
        -v "$PROJECT_ROOT:/workspace" \
        -v "$OUTPUT_DIR:/output" \
        -w /workspace/core/archipelago \
        rust:bookworm \
        sh -c '
            echo "📦 Installing build dependencies..."
            apt-get update && apt-get install -y pkg-config libssl-dev
            
            echo "🔨 Building Archipelago backend..."
            cargo build --release
            
            echo "📋 Copying binary to output..."
            cp ../target/release/archipelago /output/
            
            echo "✅ Build complete!"
            ls -lh /output/archipelago
        '
else
    # Native Linux build
    echo "🐧 Building natively..."
    cd "$BACKEND_DIR"
    cargo build --release
    
    cp "../target/release/archipelago" "$OUTPUT_DIR/archipelago"
fi

# Strip binary for smaller size
if [ -f "$OUTPUT_DIR/archipelago" ]; then
    if command -v strip >/dev/null 2>&1 && [[ "$OSTYPE" != "darwin"* ]]; then
        strip "$OUTPUT_DIR/archipelago"
    fi
    echo ""
    echo "✅ Backend built: $OUTPUT_DIR/archipelago"
    ls -lh "$OUTPUT_DIR/archipelago"
else
    echo "❌ Build failed - binary not found"
    exit 1
fi
