import { spawnSync } from "node:child_process";
import { createSerwistRoute } from "@serwist/turbopack";

/**
 * Cozsweet Serwist Service Worker Route Handler
 *
 * 路径：捕获 `/serwist/*` 所有子路径（典型是 `/serwist/sw.js` 主 SW + 一些 Serwist 内部 chunk）
 * 因此 `[[...slug]]` 是必须的 —— 仅 `app/serwist/sw.js` 一条不够，Serwist 还会
 * 拉取 `/serwist/<chunk>.js` 等辅助资源。
 *
 * `createSerwistRoute` 在 build 阶段用 esbuild 把 `src/app/sw.ts` 编译成真实 SW，
 * 并在 runtime 把编译产物通过 GET handler 吐出去。
 *
 * Revision 用 `git rev-parse HEAD` —— 每次 commit 变化让 precache 失效，强制客户端
 * 拉新 SW。fallback 到 randomUUID（罕见的非 git 环境兜底）。
 */
const revision =
  spawnSync("git", ["rev-parse", "HEAD"], { encoding: "utf-8" }).stdout ??
  crypto.randomUUID();

export const { dynamic, dynamicParams, revalidate, generateStaticParams, GET } =
  createSerwistRoute({
    additionalPrecacheEntries: [{ url: "/~offline", revision }],
    swSrc: "src/app/sw.ts",
    useNativeEsbuild: true,
  });