import { formatDuration, markNativeReady, required } from "./shared/shell.ts";
markNativeReady();
type ProbeId = "static" | "worker" | "dynamic" | "mts" | "tsx" | "cts";
const log = required<HTMLElement>("[data-runtime-log]");
function update(id: ProbeId, ok: boolean, detail: string): void { const row = required<HTMLElement>(`[data-probe="${id}"]`); const state = required<HTMLElement>(".probe-state", row); const description = required<HTMLElement>(".probe-detail", row); state.textContent = ok ? "PASS" : "FAIL"; state.className = `probe-state ${ok ? "ok" : "error"}`; description.textContent = detail; log.textContent += `\n[${ok ? "PASS" : "FAIL"}] ${id}: ${detail}`; }
async function runProbe(id: ProbeId, action: () => Promise<string>): Promise<void> { const started = performance.now(); try { update(id, true, `${await action()} · ${formatDuration(performance.now() - started)}`); } catch (error) { update(id, false, error instanceof Error ? error.message : String(error)); } }
async function runAll(): Promise<void> {
  log.textContent = `Started ${new Date().toLocaleTimeString()}`;
  update("static", true, "runtime.ts imported shared/shell.ts");
  await runProbe("worker", () => new Promise<string>((resolve, reject) => { const worker = new Worker("/assets/ts/worker/compute-worker.ts", { type: "module" }); const timer = window.setTimeout(() => { worker.terminate(); reject(new Error("Worker timed out")); }, 5000); worker.addEventListener("message", (event) => { window.clearTimeout(timer); worker.terminate(); resolve(`${event.data.count} primes ≤ ${event.data.limit}`); }); worker.addEventListener("error", (event) => reject(new Error(event.message))); worker.postMessage({ limit: 30000 }); }));
  await runProbe("dynamic", async () => { const { result } = await import("./extensions/dynamic.ts"); return `${result.channel} → ${result.value}`; });
  await runProbe("mts", async () => { const module = await import("./extensions/probe.mts"); return `${module.extension} value=${module.value}`; });
  await runProbe("tsx", async () => { const { probe } = await import("./extensions/probe.tsx"); return `${probe.extension} transform=${probe.jsxTransformRequired}`; });
  await runProbe("cts", async () => { const module = await import("./extensions/probe.cts"); return `${module.extension} ${module.mode}`; });
}
required<HTMLButtonElement>("[data-run-all]").addEventListener("click", runAll);
required<HTMLButtonElement>("[data-reset-probes]").addEventListener("click", () => { document.querySelectorAll<HTMLElement>(".probe-state").forEach((state) => { state.textContent = "WAIT"; state.className = "probe-state"; }); log.textContent = "Ready."; });
await runAll();
