#!/usr/bin/env bash
set -euo pipefail

for cmd in bash git gh vim vi nano make cmake ninja gcc g++ clang python3 pipx node npm pnpm tsx go rustc cargo java mvn gradle php composer ruby bundle R Rscript pandoc weasyprint tmux pdflatex xelatex lualatex latexmk biber synctex; do
  command -v "$cmd" >/dev/null || { echo "missing: $cmd" >&2; exit 1; }
done


for cmd in curl wget ssh scp sftp telnet ftp lftp nc netcat ncat socat ping traceroute tracepath mtr dig nslookup host whois rsync; do
  if command -v "$cmd" >/dev/null 2>&1; then
    echo "forbidden network utility present: $cmd" >&2
    exit 1
  fi
done

# Presence alone is not sufficient: package-manager shims can exist but be
# unusable with the installed Node runtime. Exercise the key version entry
# points so image provisioning fails before the live staging app is quiesced.
node --version >/dev/null
# pnpm 11 requires Node >=22.13. Keep this explicit so a distro downgrade or
# PATH regression fails during docker build, before staging services are touched.
node -e 'const [major, minor] = process.versions.node.split(".").map(Number); if (major < 22 || (major === 22 && minor < 13)) { console.error(`Node >=22.13 required; found ${process.versions.node}`); process.exit(1); }'
npm --version >/dev/null
pnpm --version >/dev/null
tsx --version >/dev/null
python3 --version >/dev/null
python3 -c 'import numpy,scipy,pandas,matplotlib,sympy'
vim --version >/dev/null
vi --version >/dev/null
nano --version >/dev/null
gcc --version >/dev/null
g++ --version >/dev/null
go version >/dev/null
rustc --version >/dev/null
java -version >/dev/null 2>&1
php --version >/dev/null
ruby --version >/dev/null
Rscript --version >/dev/null 2>&1
pdflatex --version >/dev/null
xelatex --version >/dev/null
lualatex --version >/dev/null
latexmk --version >/dev/null
biber --version >/dev/null
synctex help >/dev/null 2>&1 || synctex --version >/dev/null 2>&1

printf 'Learnitive unified code + LaTeX toolchain OK\n'
