import type { NextConfig } from "next";
import { withSerwist } from "@serwist/turbopack";

/**
 * Next.js 16 临时绕过 `/_global-error` prerender 的 workStore bug
 * 标记根 layout 不参与静态预渲染（global-error 会在请求时渲染）
 * https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config
 *
 * 默认部署模型：`.next/` + `public/` + `next start`（或 Vercel 零配置）
 *   - `pnpm build` 产出 .next/（含 build manifest / chunks / 路由表 / 静态预渲染）
 *   - 脚本侧：scripts/deploy/_deploy_lib.sh 同步 .next/ + public/
 *   - 服务器启动：`cd <path> && next start -H 0.0.0.0 -p 3000`
 *     或用 PM2：`pm2 start "next start" --name cozsweet`
 *
 * PWA 集成：`@serwist/turbopack` 在 build 阶段用 esbuild 编译 `src/app/sw.ts` 源文件。
 *   - Turbopack 原生支持 —— 不再需要 `--webpack` flag
 *   - SW 通过 Serwist Route Handler（src/app/serwist/[[...slug]]/route.ts）在 `/serwist/sw.js` 服务
 *   - 客户端注册走 `<SerwistProvider swUrl="/serwist/sw.js">`（替代旧的 <SwRegister />）
 *
 * 历史：
 *   - 之前用 @ducanh2912/next-pwa（webpack-only），被迫用 `--webpack` 退 Turbopack
 *   - 切到 @serwist/turbopack 后拿回 Turbopack 的 dev/build 性能
 */
const nextConfig: NextConfig = {
  experimental: {
    // 关闭静态优化以规避 16.2.7 global-error prerender bug
    staticGenerationRetryCount: 0,
  },
  images: {
    // Facebook OAuth 登录后，`picture.type(large)` 返回
    //   platform-lookaside.fbsbx.com/platform/profilepic/?asid=...&hash=...
    // 该 URL 是**下载链接**而非可缓存图片，next/image 优化器需要显式 allowlist。
    // graph.facebook.com 兜底：Graph 偶尔返回直链头像 / OG 图。
    remotePatterns: [
      {
        protocol: "https",
        hostname: "platform-lookaside.fbsbx.com",
      },
      {
        protocol: "https",
        hostname: "graph.facebook.com",
      },
    ],
  },
};

export default withSerwist(nextConfig);