#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
ARCH="$(uname -m)"

solver_wants_cudart() {
  ldd "${ROOT}/bin/pearl-solver" 2>/dev/null | grep -q 'libcudart'
}

echo "[pearl] nvidia-smi..."
nvidia-smi -L | head -3 || { echo "no nvidia-smi"; exit 1; }

if [[ ! -x "${ROOT}/bin/pearl-solver" ]]; then
  case "$ARCH" in
    x86_64|amd64) ln -sf "../solvers/x86_64/pearl-solver" "${ROOT}/bin/pearl-solver" ;;
    aarch64|arm64)
      if ls /usr/local/cuda-13/lib64/libcudart.so* &>/dev/null; then
        ln -sf "../solvers/aarch64-cuda13/pearl-solver" "${ROOT}/bin/pearl-solver"
      else
        ln -sf "../solvers/aarch64-cuda12/pearl-solver" "${ROOT}/bin/pearl-solver"
      fi
      ;;
  esac
  chmod +x "${ROOT}/bin/pearl-solver" 2>/dev/null || true
fi

if [[ "$ARCH" == x86_64* ]] && ! solver_wants_cudart; then
  echo "[pearl] CUDA driver OK (static solver)"
else
  if ! ldconfig -p 2>/dev/null | grep -q libcudart.so; then
    echo "[pearl] installing cuda runtime..."
    export DEBIAN_FRONTEND=noninteractive
    apt-get update -qq
    apt-get install -y cuda-cudart-12-6 || apt-get install -y cuda-cudart-13-0 || true
    ldconfig
  fi
fi

source "${ROOT}/env.sh"
HELP="$("${ROOT}/bin/pearl-solver" --help 2>&1 || true)"
if ! echo "$HELP" | grep -q share-target; then
  echo "[pearl] solver check failed"; exit 1
fi
echo "[pearl] ready → ./configure.sh ADDRESS worker"
