import { execFileSync } from "node:child_process";
import { readdirSync } from "node:fs";
import { join } from "node:path";

const __dirname = import.meta.dirname;

if ((process.env.SF_LIVE_TESTS || process.env.SF_LIVE_TESTS) !== "1") {
	console.log("Skipping live tests (set SF_LIVE_TESTS=1 to enable)");
	process.exit(0);
}

const testFiles = readdirSync(__dirname)
	.filter((f) => f.startsWith("test-") && f.endsWith(".ts"))
	.sort();

if (testFiles.length === 0) {
	console.error("No live test files found");
	process.exit(1);
}

let passed = 0;
let failed = 0;
let skipped = 0;

for (const file of testFiles) {
	const filePath = join(__dirname, file);
	const label = file.replace(/\.ts$/, "");
	try {
		execFileSync("node", ["--experimental-strip-types", filePath], {
			encoding: "utf8",
			stdio: "pipe",
			timeout: 60_000,
		});
		console.log(`  PASS  ${label}`);
		passed++;
	} catch (err: any) {
		const output = (err.stdout || "") + (err.stderr || "");
		if (output.includes("SKIPPED")) {
			console.log(`  SKIP  ${label}`);
			skipped++;
		} else {
			console.error(`  FAIL  ${label}`);
			if (err.stdout) console.error(err.stdout);
			if (err.stderr) console.error(err.stderr);
			failed++;
		}
	}
}

console.log(
	`\nLive tests: ${passed} passed, ${failed} failed, ${skipped} skipped`,
);
if (failed > 0) process.exit(1);
