#!/usr/bin/env bash
set -eu
checkout=$1
side=$2
root=$(cd "$(dirname "$0")" && pwd)
out="$root/$side-$(date +%s)"
mkdir -p "$out"
printf '%s\n' "$out" > "$root/$side-latest"
export T3CODE_HOME="$out/home"
export T3CODE_DEV_SEED=0
export HOME="$out/os-home"
export XDG_CONFIG_HOME="$out/config"
export CODEX_HOME="$out/codex"
export CLAUDE_CONFIG_DIR="$out/claude"
mkdir -p "$HOME" "$XDG_CONFIG_HOME" "$CODEX_HOME" "$CLAUDE_CONFIG_DIR"
export PROOF_EVENTS="$out/events.jsonl"
export NODE_OPTIONS="--require=$root/stall.cjs"
unset ELECTRON_RUN_AS_NODE
start=$(date +%s)
cd "$checkout/apps/desktop"
./node_modules/electron/dist/electron . --no-sandbox --disable-gpu --user-data-dir="$out/profile" > "$out/app.log" 2>&1 &
app_pid=$!
ffmpeg -y -loglevel error -f x11grab -framerate 10 -video_size 1280x900 -i "$DISPLAY+0,0" -c:v libx264 -preset ultrafast -crf 23 -pix_fmt yuv420p "$out/startup.mp4" > "$out/record.log" 2>&1 &
record_pid=$!
trap 'kill -INT "$record_pid" 2>/dev/null || true; kill -TERM "$app_pid" 2>/dev/null || true' EXIT
for i in $(seq 1 30); do
  window=$(xdotool search --onlyvisible --pid "$app_pid" 2>/dev/null | head -1 || true)
  if [ -n "$window" ]; then
    xdotool windowmove "$window" 0 0 windowsize "$window" 1280 900
    break
  fi
  sleep 1
done
for target in 16 40 60; do
  now=$(date +%s)
  delay=$((start+target-now))
  if [ "$delay" -gt 0 ]; then sleep "$delay"; fi
  import -window root -crop 1280x900+0+0 "$out/at-${target}s.png"
done
sleep 0.5
import -window root -crop 1280x900+0+0 "$out/stability.png"
compare -metric AE "$out/at-60s.png" "$out/stability.png" null: 2> "$out/stability.txt" || true
kill -INT "$record_pid"
wait "$record_pid" || true
kill -TERM "$app_pid"
wait "$app_pid" || true
trap - EXIT
