#!/usr/bin/env bash
# usage: tools/gpu/run.sh <probe.py> <local_out>   - stage browse/ + index.json + blobs on gex44, serve on 127.0.0.1,
# run the probe on the GPU with playwright, copy <out> back. Stops ONLY the server it started; removes its run dir.
# FAL_ROOT can point at a disposable subset library; FAL_RUN_DIR selects a pre-claimed remote scratch folder.
set -euo pipefail
ROOT=${FAL_ROOT:-$(cd "$(dirname "$0")/../.." && pwd)}; PROBE=$(readlink -f "$1"); OUT=$2
HOST=root@5.9.10.114; RUN=${FAL_RUN_DIR:-/tmp/fal-gpu/run-$(date +%s%N)}; PORT=${FAL_PORT:-8961}
mkdir -p "$OUT"
ssh "$HOST" "mkdir -p $RUN/site/blobs $RUN/out"
rsync -a --copy-unsafe-links --exclude blobs --exclude thumbs "$ROOT/browse/" "$HOST:$RUN/site/"
rsync -a "$ROOT/index.json" "$HOST:$RUN/site/"
[ -d "$ROOT/store/blobs" ] && rsync -a "$ROOT/store/blobs/" "$HOST:$RUN/site/blobs/" || true  # worktrees have no blobs
scp -q "$PROBE" "$HOST:$RUN/probe.py"
if [ -n "${FAL_PROBE_FILE:-}" ]; then scp -q "$FAL_PROBE_FILE" "$HOST:$RUN/probe-arg.json"; FAL_PROBE_ARG=$RUN/probe-arg.json; fi   # a file argument (shots_probe.py)
ssh "$HOST" "cd $RUN/site && (python3 -m http.server $PORT --bind 127.0.0.1 >/dev/null 2>&1 & echo \$! > $RUN/server.pid) && sleep 1 &&
  python3 $RUN/probe.py http://127.0.0.1:$PORT/ $RUN/out ${FAL_PROBE_ARG:-}; rc=\$?; kill \$(cat $RUN/server.pid) 2>/dev/null; exit \$rc"
rsync -a "$HOST:$RUN/out/" "$OUT/"
ssh "$HOST" "find $RUN -delete"
