#!/usr/bin/env bash
# Full feature test against a throwaway instance — the real database is never touched.
#   bash deploy/test-on-host.sh            (uses ./data-selftest and port 3412)
#   PORT=3500 bash deploy/test-on-host.sh
set -euo pipefail
cd "$(dirname "$0")/.."

TEST_DIR=${TEST_DIR:-data-selftest}
PORT=${PORT:-3412}

case "$TEST_DIR" in
  data|./data|data/) echo "!! refusing to use the live data folder"; exit 1 ;;
esac
if [ -e "$TEST_DIR" ]; then
  echo "!! $TEST_DIR already exists - remove it first (it holds test rows only)"
  exit 1
fi

mkdir -p "$TEST_DIR"
PID=""
cleanup() {
  [ -n "$PID" ] && kill "$PID" 2>/dev/null || true
  sleep 1
  rm -rf "$TEST_DIR"
}
trap cleanup EXIT

DATA_DIR="$PWD/$TEST_DIR" PORT="$PORT" node server/src/index.js > "$TEST_DIR/server.log" 2>&1 &
PID=$!

echo "==> waiting for http://127.0.0.1:$PORT/api/health"
READY=0
for _ in $(seq 1 60); do
  if node -e "fetch('http://127.0.0.1:$PORT/api/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"; then
    READY=1; break
  fi
  kill -0 "$PID" 2>/dev/null || { echo "!! server died:"; cat "$TEST_DIR/server.log"; exit 1; }
  sleep 1
done
[ "$READY" = 1 ] || { echo "!! server never answered:"; cat "$TEST_DIR/server.log"; exit 1; }

STATUS=0
BASE_URL="http://127.0.0.1:$PORT/api" node deploy/full-test.mjs || STATUS=$?

echo
echo "==> server log tail"
tail -n 12 "$TEST_DIR/server.log" || true
echo "==> exit status $STATUS"
exit "$STATUS"
