#!/bin/bash
# Reproduces pingdotgg/t3code#27120 against a checkout: repro.sh <checkout> <outdir>
set -u
SRC=$1; OUT=$2; PORT=${PORT:-47120}
BIN="$SRC/apps/server/src/bin.ts"
BASE="$OUT/t3-repro"
mkdir -p "$OUT"
cd "$SRC/apps/server"
t3() { node "$BIN" "$@"; }
show() { echo "--- $1"; ls -la "$BASE/userdata" 2>&1 | grep -E 'sqlite|runtime|total|No such' ; }

echo "== commit $(git -C "$SRC" rev-parse --short HEAD)"
echo "== 1. start server with --base-dir $BASE"
T3CODE_DEV_SEED=0 node "$BIN" serve --base-dir "$BASE" --port $PORT --host 127.0.0.1 > "$OUT/server.log" 2>&1 &
SERVER=$!
echo "server pid $SERVER"
for i in $(seq 1 120); do [ -f "$BASE/userdata/server-runtime.json" ] && break; sleep 0.5; done
show "after server start"
echo "--- t3 thread list (baseline, DB present)"; t3 thread list --base-dir "$BASE" 2>&1 | tail -3; echo "exit $?"

echo "== 2. move statev2.sqlite* aside"
mkdir -p "$OUT/aside"; mv "$BASE"/userdata/statev2.sqlite* "$OUT/aside/"
show "after move"

echo "== 3a. t3 thread list --base-dir (server registered)"
t3 thread list --base-dir "$BASE" > "$OUT/3a.txt" 2>&1; echo "exit $?"; tail -4 "$OUT/3a.txt"
show "after t3 thread list"
[ -f "$BASE/userdata/statev2.sqlite" ] && echo "tables: $(sqlite3 "$BASE/userdata/statev2.sqlite" "select count(*) from sqlite_master where type='table'") projects: $(sqlite3 "$BASE/userdata/statev2.sqlite" "select count(*) from projection_projects" 2>&1)"
rm -f "$BASE"/userdata/statev2.sqlite "$BASE"/userdata/statev2.sqlite-wal "$BASE"/userdata/statev2.sqlite-shm

mkdir -p "$OUT/ws"
echo "== 3b. t3 project add --base-dir (live server path)"
t3 project add "$OUT/ws" --base-dir "$BASE" > "$OUT/3b.txt" 2>&1; echo "exit $?"; tail -4 "$OUT/3b.txt"
show "after t3 project list"
rm -f "$BASE"/userdata/statev2.sqlite "$BASE"/userdata/statev2.sqlite-wal "$BASE"/userdata/statev2.sqlite-shm

echo "== stop server $SERVER"
kill $SERVER; wait $SERVER 2>/dev/null
rm -f "$BASE"/userdata/statev2.sqlite "$BASE"/userdata/statev2.sqlite-wal "$BASE"/userdata/statev2.sqlite-shm
show "after server stop"

echo "== 3c. variant: no server registered, t3 thread list"
t3 thread list --base-dir "$BASE" > "$OUT/3c.txt" 2>&1; echo "exit $?"; tail -3 "$OUT/3c.txt"
show "after t3 thread list (no server)"
rm -f "$BASE"/userdata/statev2.sqlite "$BASE"/userdata/statev2.sqlite-wal "$BASE"/userdata/statev2.sqlite-shm

echo "== 3d. variant: never-created base dir, t3 thread list"
t3 thread list --base-dir "$OUT/fresh" > "$OUT/3d.txt" 2>&1; echo "exit $?"; tail -2 "$OUT/3d.txt"
echo "--- fresh dir:"; find "$OUT/fresh" -maxdepth 2 2>&1 | head
