#!/usr/bin/env bash
set -euo pipefail
trap 'echo "ERROR: build failed in ${BASH_SOURCE[0]} at line ${LINENO}" >&2' ERR

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
export SCRIPT_DIR

PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"

if [[ ! -d "$PROJECT_DIR" ]]; then
  echo "Project directory $PROJECT_DIR does not exist" >&2
  exit 1
fi

if [[ ! -f "$PROJECT_DIR/pyproject.toml" && ! -f "$PROJECT_DIR/setup.py" ]]; then
  echo "Invalid Python project directory, did not find either pyproject.toml or setup.py in $PROJECT_DIR" >&2
  exit 1
fi

echo "Project Directory: $PROJECT_DIR" >&2

dnf install -y wget nasm

case "$(uname -m)" in
  x86_64|amd64|i386|i686) ARCH="x86_64" ;;
  aarch64|arm64|arm*)     ARCH="aarch64" ;;
  *)                      ARCH="$(uname -m)" ;;
esac
export ARCH

BASE="$PWD"
export SOURCE="$BASE/source"
export BUILD="$BASE/build"
export BIN="$BASE/usr/local/bin"
export LD_RUN_PATH='$ORIGIN'
export ACLOCAL_PATH=/usr/share/aclocal
export LD_LIBRARY_PATH="$BUILD/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
export PKG_CONFIG_PATH="$BUILD/lib/pkgconfig"
export SDL2_DIR="$BUILD"

"$SCRIPT_DIR/build_libs"

#venvs=("py314")
venvs=("py310" "py311" "py312" "py313" "py314")

for venv in "${venvs[@]}"; do
  echo "Python venv: $venv" >&2

  if [[ ! -d "$BASE/$venv" ]]; then
    version="${venv:2}"
    version="${version:0:1}.${version:1}"
    echo "version $version"
    python${version} -m venv "$BASE/$venv"
    source "$BASE/$venv/bin/activate"
    pip install --upgrade pip
    deactivate
  fi

  source "$BASE/$venv/bin/activate"
  python --version

  pip install build auditwheel patchelf
  cd "$PROJECT_DIR"
  python -m build --sdist --wheel

  wheel=$(ls -1 dist/*"${venv:2}"* | tail -n 1)
  echo "$wheel"

  case "$ARCH" in
    x86_64)
      echo "processor architecture is x86"
      auditwheel repair "$wheel" --plat manylinux_2_28_x86_64
      ;;
    aarch64)
      echo "aarch64"
      auditwheel repair "$wheel" --plat manylinux_2_28_aarch64
      ;;
    *)
      echo "ERROR: UNABLE TO BUILD WHEEL - Unknown architecture: $ARCH" >&2
      exit 1
      ;;
  esac

  deactivate
done