import { describe, it, expect } from "vitest";
import { mkdtempSync, cpSync } from "node:fs";
import { tmpdir } from "node:os";
import { execSync } from "node:child_process";
import { join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { computeSnapshot } from "../lib/snapshot.js";
import expectedSnapshot from "../__snapshots__/core-package/realtime.snapshot.json" with { type: "json" };

// Repo root is 2 levels up from turbo/generators/__tests__
const REPO_ROOT = resolve(fileURLToPath(import.meta.url), "..", "..", "..", "..");

describe("e2e: core-package realtime", () => {
  it("byte-identical reconstruction matches snapshot", { timeout: 120_000 }, () => {
    const tmp = mkdtempSync(join(tmpdir(), "e2e-"));
    cpSync(REPO_ROOT, tmp, {
      recursive: true,
      filter: (src) =>
        !src.includes("node_modules") &&
        !src.includes(".turbo") &&
        !src.includes("packages/core-realtime"),
    });
    execSync(`cd ${tmp} && pnpm install --frozen-lockfile=false`, { stdio: "ignore" });
    execSync(`cd ${tmp} && pnpm turbo gen core-package --args realtime`, { stdio: "ignore" });
    const result = computeSnapshot(join(tmp, "packages/core-realtime"));
    expect(result).toEqual(expectedSnapshot);
  });
});
