#!/usr/bin/env bash
# tooling/install-godot — Download and install Godot to ~/bin/
#
# Usage:
#   GODOT_VERSION=4.6 ./tooling/install-godot
#   ./tooling/install-godot              # uses default version
#
# Installs the Godot binary to ~/bin/godot4.
# Skips download if correct version is already installed.

set -euo pipefail

GODOT_VERSION="${GODOT_VERSION:-4.6}"
INSTALL_DIR="$HOME/bin"
BINARY="$INSTALL_DIR/godot4"

# Check if already installed at the right version
if [[ -x "$BINARY" ]]; then
    INSTALLED="$("$BINARY" --version 2>/dev/null | head -1 | cut -d. -f1-2)" || true
    if [[ "$INSTALLED" == "$GODOT_VERSION" ]]; then
        echo "Godot $GODOT_VERSION already installed at $BINARY"
        exit 0
    fi
    echo "Godot found but version is $INSTALLED, want $GODOT_VERSION"
fi

# Detect platform and architecture
OS="$(uname -s)"
ARCH="$(uname -m)"

case "$OS" in
    Linux)
        case "$ARCH" in
            x86_64)  PLATFORM="linux.x86_64" ;;
            aarch64) PLATFORM="linux.arm64" ;;
            *)       echo "Error: unsupported architecture: $ARCH"; exit 1 ;;
        esac
        ;;
    Darwin)
        PLATFORM="macos.universal"
        ;;
    *)
        echo "Error: unsupported OS: $OS"
        echo "Install Godot manually: https://godotengine.org/download"
        exit 1
        ;;
esac

FILENAME="Godot_v${GODOT_VERSION}-stable_${PLATFORM}.zip"
URL="https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable/${FILENAME}"

echo "Downloading Godot $GODOT_VERSION for $PLATFORM..."
echo "  $URL"

mkdir -p "$INSTALL_DIR"

# Download to temp directory
TMPDIR="$(mktemp -d)"
trap 'rm -rf "$TMPDIR"' EXIT

if ! curl -fSL --progress-bar -o "$TMPDIR/$FILENAME" "$URL"; then
    echo "Error: download failed. Check GODOT_VERSION=$GODOT_VERSION is a valid release."
    echo "Available releases: https://github.com/godotengine/godot/releases"
    exit 1
fi

# Extract
echo "Extracting..."
if ! command -v unzip >/dev/null 2>&1; then
    echo "Error: unzip is required but not found. Install it and retry."
    exit 1
fi
unzip -q -o "$TMPDIR/$FILENAME" -d "$TMPDIR/extract"

# Install binary
case "$OS" in
    Linux)
        SRC="$TMPDIR/extract/Godot_v${GODOT_VERSION}-stable_${PLATFORM}"
        if [[ -f "$SRC" ]]; then
            chmod +x "$SRC"
            mv "$SRC" "$BINARY"
        else
            echo "Error: expected binary not found after extraction"
            ls -la "$TMPDIR/extract/"
            exit 1
        fi
        ;;
    Darwin)
        SRC="$TMPDIR/extract/Godot.app/Contents/MacOS/Godot"
        if [[ -f "$SRC" ]]; then
            mv "$SRC" "$BINARY"
            chmod +x "$BINARY"
        else
            echo "Error: expected Godot.app binary not found after extraction"
            ls -la "$TMPDIR/extract/"
            exit 1
        fi
        ;;
esac

# Verify
if "$BINARY" --version >/dev/null 2>&1; then
    echo "Godot $GODOT_VERSION installed to $BINARY"
    "$BINARY" --version
else
    echo "Warning: installed to $BINARY but --version check failed."
    echo "This may be a display server issue (expected in headless environments)."
fi
