#!/bin/bash

# MetaMuLate Unified Proxy Build Script
# Compiles for macOS (ARM/Intel), Windows, and Linux

set -e

echo "╔══════════════════════════════════════════════════════════════╗"
echo "║   🎵  MetaMuLate Proxy - Build Script                        ║"
echo "╚══════════════════════════════════════════════════════════════╝"
echo ""

# Get script directory and set up paths
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROXY_DIR="$(dirname "$SCRIPT_DIR")"
CODE_DIR="$PROXY_DIR/code"
BIN_DIR="$PROXY_DIR/bin"

# Change to code directory
cd "$CODE_DIR"

# Ensure bin directory exists
mkdir -p "$BIN_DIR"

# Check if Go is installed
if ! command -v go &> /dev/null; then
    echo "❌ Go is not installed. Please install Go 1.21+ first."
    echo "   https://golang.org/dl/"
    exit 1
fi

echo "Go version: $(go version)"
echo ""

# Initialize module if needed
if [ ! -f "go.mod" ]; then
    echo "📦 Initializing Go module..."
    go mod init metamulate-proxy
fi

# Download dependencies
echo "📥 Downloading dependencies..."
go mod tidy

echo ""
echo "🔨 Building binaries..."
echo ""

# Build for current platform first
echo "  [1/5] Current platform..."
go build -ldflags="-s -w" -o "$BIN_DIR/metamulate-proxy" metamulate-proxy.go
echo "        ✅ metamulate-proxy ($(du -h "$BIN_DIR/metamulate-proxy" | cut -f1))"

# macOS ARM64 (Apple Silicon)
echo "  [2/5] macOS ARM64 (Apple Silicon)..."
GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o "$BIN_DIR/metamulate-proxy-mac-arm" metamulate-proxy.go
echo "        ✅ metamulate-proxy-mac-arm"

# macOS AMD64 (Intel)
echo "  [3/5] macOS AMD64 (Intel)..."
GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o "$BIN_DIR/metamulate-proxy-mac-intel" metamulate-proxy.go
echo "        ✅ metamulate-proxy-mac-intel"

# Windows AMD64
echo "  [4/5] Windows AMD64..."
GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o "$BIN_DIR/metamulate-proxy.exe" metamulate-proxy.go
echo "        ✅ metamulate-proxy.exe"

# Linux AMD64
echo "  [5/5] Linux AMD64..."
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o "$BIN_DIR/metamulate-proxy-linux" metamulate-proxy.go
echo "        ✅ metamulate-proxy-linux"

echo ""
echo "════════════════════════════════════════════════════════════════"
echo "  ✅ Build complete!"
echo ""
echo "  Binaries created in $BIN_DIR:"
ls -lh "$BIN_DIR"/metamulate-proxy* 2>/dev/null | awk '{print "    " $NF " (" $5 ")"}'
echo ""
echo "  Usage:"
echo "    ./metamulate-proxy              # Interactive mode"
echo "    ./metamulate-proxy --help       # Show help"
echo "    ./metamulate-proxy --config proxy-config.json"
echo "════════════════════════════════════════════════════════════════"
