#!/bin/bash
# Regression: phase 6 offline HTML uses the same graph interaction foundation as the workbench.
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
# shellcheck disable=SC1091
source "$REPO_ROOT/tests/lib/graph-html-engine-helpers.sh"
tmp_dir="$(mktemp -d)"
cleanup() {
rm -rf "$tmp_dir"
}
trap cleanup EXIT
npm run build -w @llm-wiki/graph-engine > /dev/null 2>&1 \
|| fail "graph-engine IIFE build should succeed before phase 6 offline regression"
for fixture in graph-interactive-basic graph-interactive-dense graph-interactive-multicomm; do
cp -R "$REPO_ROOT/tests/fixtures/$fixture" "$tmp_dir/$fixture"
bash "$REPO_ROOT/scripts/build-graph-html.sh" "$tmp_dir/$fixture" > /dev/null 2>&1 \
|| fail "build-graph-html.sh should succeed on $fixture"
html="$tmp_dir/$fixture/wiki/knowledge-graph.html"
assert_file_exists "$html"
[ -s "$html" ] || fail "$fixture generated knowledge-graph.html should be non-empty"
assert_single_file_engine_output "$tmp_dir/$fixture/wiki"
done
artifact_dir="${GRAPH_OFFLINE_PHASE_6_ARTIFACT_DIR:-$(mktemp -d "${TMPDIR:-/tmp}/llm-wiki-graph-offline-phase-6.XXXXXX")}"
mkdir -p "$artifact_dir"
playwright_node_path="$(
npx --yes -p playwright -c 'node -e "const path=require(\"path\"); console.log(path.dirname(process.env.PATH.split(\":\")[0]))"'
)"
chrome_executable="${GRAPH_OFFLINE_PHASE_6_CHROME_EXECUTABLE:-}"
if [ -z "$chrome_executable" ] && [ -x "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" ]; then
chrome_executable="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
fi
GRAPH_OFFLINE_PHASE_6_BASIC_HTML="$tmp_dir/graph-interactive-basic/wiki/knowledge-graph.html" \
GRAPH_OFFLINE_PHASE_6_DENSE_HTML="$tmp_dir/graph-interactive-dense/wiki/knowledge-graph.html" \
GRAPH_OFFLINE_PHASE_6_MULTICOMM_HTML="$tmp_dir/graph-interactive-multicomm/wiki/knowledge-graph.html" \
GRAPH_OFFLINE_PHASE_6_ARTIFACT_DIR="$artifact_dir" \
GRAPH_OFFLINE_PHASE_6_CHROME_EXECUTABLE="$chrome_executable" \
NODE_PATH="$playwright_node_path" \
node "$REPO_ROOT/tests/browser/graph-offline-phase-6.mjs" \
|| fail "phase 6 offline graph browser regression should pass"
echo "Artifacts: $artifact_dir"
echo "PASS: phase 6 offline graph regression"