#!/usr/bin/env bash
# live-test-session-path-fixes.sh — Live tests for WSL session crash fixes
# Run: bash session-path-fixes.test.sh
set -e
source ~/.nvm/nvm.sh 2>/dev/null
cd ~/helios-agent

PASS=0
FAIL=0
ERRORS=()
ok()   { echo "  ✅ $1"; PASS=$((PASS+1)); }
fail() { echo "  ❌ $1"; FAIL=$((FAIL+1)); ERRORS+=("$1"); }

# Helper: count grep matches without letting grep -c return multi-line values
count_matches() {
  local file="$1"; local pattern="$2"
  grep -cP "$pattern" "$file" 2>/dev/null || echo "0"
}

echo ""
echo "=== TEST GROUP 1: session-isolation.ts — no stale .pi paths ==="

STALE=$(grep -c "'\\.pi'.*agent.*sessions\|\"\.pi\".*agent.*sessions" \
  extensions/session-isolation.ts 2>/dev/null; true)
STALE=$(echo "$STALE" | tr -d '[:space:]')
if [ "$STALE" = "0" ]; then
  ok "session-isolation.ts: no .pi/agent sessions paths remaining"
else
  fail "session-isolation.ts: found $STALE stale .pi/agent sessions reference(s)"
fi

CORRECT=$(grep -c "helios-agent.*sessions.*active\|sessions.*active.*helios-agent" \
  extensions/session-isolation.ts 2>/dev/null; true)
CORRECT=$(echo "$CORRECT" | tr -d '[:space:]')
if [ "$CORRECT" -ge 2 ] 2>/dev/null; then
  ok "session-isolation.ts: helios-agent/sessions/active used in $CORRECT places"
else
  fail "session-isolation.ts: helios-agent/sessions/active only in $CORRECT places (need >=2)"
fi

echo ""
echo "=== TEST GROUP 2: session-reaper.ts — no stale execSync+grep ==="

STALE_PS=$(grep -c 'ps aux.*pi.*agent\|execSync.*ps.*grep' \
  extensions/session-reaper.ts 2>/dev/null; true)
STALE_PS=$(echo "$STALE_PS" | tr -d '[:space:]')
if [ "$STALE_PS" = "0" ]; then
  ok "session-reaper.ts: no execSync(ps aux grep .pi/agent)"
else
  fail "session-reaper.ts: still has $STALE_PS stale execSync(ps aux) calls"
fi

EF=$(grep -c 'execFile(' extensions/session-reaper.ts 2>/dev/null; true)
EF=$(echo "$EF" | tr -d '[:space:]')
if [ "$EF" -ge 2 ] 2>/dev/null; then
  ok "session-reaper.ts: cleanupZombieProcesses uses execFile(ps) ($EF total execFile calls)"
else
  fail "session-reaper.ts: insufficient execFile usage ($EF — expected >=2)"
fi

HP=$(grep -c 'helios-agent' extensions/session-reaper.ts 2>/dev/null; true)
HP=$(echo "$HP" | tr -d '[:space:]')
if [ "$HP" -ge 1 ] 2>/dev/null; then
  ok "session-reaper.ts: zombie filter pattern targets helios-agent ($HP lines)"
else
  fail "session-reaper.ts: zombie filter pattern does not reference helios-agent"
fi

echo ""
echo "=== TEST GROUP 3: filesystem ==="

if [ -d "~/helios-agent/sessions/active" ]; then
  ok "~/helios-agent/sessions/active directory exists"
else
  fail "~/helios-agent/sessions/active directory missing"
fi

echo ""
echo "=== TEST GROUP 4: TypeScript parse — patched sections valid JS ==="

# Verify both files parse without error using node --check
node --input-type=module --check < /dev/null 2>/dev/null || true  # warmup

TS_SYNTAX_ISO=$(node -e "
const fs = require('fs');
const src = fs.readFileSync('extensions/session-isolation.ts','utf8');
// Check the patched lines are present and syntactically sensible
const checks = [
  src.includes(\"join(homedir(), 'helios-agent', 'sessions', 'active'\"),
  !src.includes(\"join(homedir(), '.pi', 'agent', 'sessions', 'active'\"),
];
const pass = checks.every(Boolean);
console.log(pass ? 'PASS' : 'FAIL');
" 2>/dev/null || echo "ERROR")

if [ "$TS_SYNTAX_ISO" = "PASS" ]; then
  ok "session-isolation.ts: patched lines syntactically present and correct"
else
  fail "session-isolation.ts: patched line check returned: $TS_SYNTAX_ISO"
fi

TS_SYNTAX_REAPER=$(node -e "
const fs = require('fs');
const src = fs.readFileSync('extensions/session-reaper.ts','utf8');
const checks = [
  src.includes(\"execFile(\"),
  src.includes(\"'helios-agent'\"),
  !src.includes(\"execSync(\n\") || !src.includes(\"ps aux | grep\"),
];
const pass = checks.every(Boolean);
console.log(pass ? 'PASS' : 'FAIL');
" 2>/dev/null || echo "ERROR")

if [ "$TS_SYNTAX_REAPER" = "PASS" ]; then
  ok "session-reaper.ts: patched lines syntactically present and correct"
else
  fail "session-reaper.ts: patched line check returned: $TS_SYNTAX_REAPER"
fi

echo ""
echo "=== TEST GROUP 5: Runtime write/read to correct path ==="

SID="test-session-$(date +%s)-$$"
SFILE="~/helios-agent/sessions/active/${SID}.json"
echo "{\"sessionId\":\"$SID\",\"pid\":$$,\"test\":true}" > "$SFILE"

if [ -f "$SFILE" ]; then
  BACK=$(python3 -c "import json,sys; d=json.load(open('$SFILE')); print(d['sessionId'])" 2>/dev/null)
  if [ "$BACK" = "$SID" ]; then
    ok "Runtime: write+read to ~/helios-agent/sessions/active works"
    rm -f "$SFILE"
  else
    fail "Runtime: readback mismatch — got '$BACK' expected '$SID'"
  fi
else
  fail "Runtime: write to ~/helios-agent/sessions/active failed"
fi

echo ""
echo "=== RESULTS ==="
echo "Passed: $PASS  |  Failed: $FAIL"
if [ "$FAIL" -gt 0 ]; then
  echo "Failures:"
  for e in "${ERRORS[@]}"; do echo "  - $e"; done
  exit 1
fi
echo "All tests passed."
