#!/usr/bin/env bash
# Scratch driver for issue 26417: start the checkout's dev server on a fresh DB, add four projects
# whose public/index.html is a FIFO, then report libuv worker states and /.well-known/t3/environment.
# Usage: fifo-favicon-driver.sh <checkout> <outdir>
set -u
CHECKOUT=$1; OUT=$2; mkdir -p "$OUT/projects"
cd "$CHECKOUT"
echo "# checkout $(git -C "$CHECKOUT" rev-parse --short HEAD)"
T3CODE_DEV_SEED=0 setsid vp run dev > "$OUT/dev.log" 2>&1 &
DEV=$!
for _ in $(seq 120); do grep -q "Listening on" "$OUT/dev.log" && break; sleep 1; done
PORT=$(grep -oP 'serverPort=\K[0-9]+' "$OUT/dev.log" | head -1)
SPID=$(ss -H -ltnp "sport = :$PORT" | grep -oP 'pid=\K[0-9]+' | head -1)
workers(){ for t in /proc/$SPID/task/*; do n=$(cat $t/comm); case $n in libuv-worker*) echo "  $n $(cat $t/wchan)";; esac; done; }
echo "## baseline"; workers
curl -s -m 8 -o /dev/null -w "  GET /.well-known/t3/environment -> %{http_code} in %{time_total}s\n" http://127.0.0.1:$PORT/.well-known/t3/environment
for i in 1 2 3 4; do mkdir -p "$OUT/projects/fav$i/public"; mkfifo "$OUT/projects/fav$i/public/index.html"
  (cd apps/server && node src/bin.ts project add "$OUT/projects/fav$i" --base-dir "$CHECKOUT/.t3" 2>&1 | tail -1 | sed 's/^/  /'); done
sleep 5
echo "## after adding 4 projects with a FIFO public/index.html (+5s)"; workers
curl -s -m 8 -o /dev/null -w "  GET /.well-known/t3/environment -> %{http_code} in %{time_total}s\n" http://127.0.0.1:$PORT/.well-known/t3/environment
# release any reader stuck on the FIFOs, then stop the server group we started
for i in 1 2 3 4; do timeout 2 sh -c "echo > '$OUT/projects/fav$i/public/index.html'" 2>/dev/null; done
kill -- -$DEV 2>/dev/null; sleep 2
for g in $(ps -o pgid= --ppid $DEV 2>/dev/null); do kill -- -$g 2>/dev/null; done
