import { withSentryConfig } from "@sentry/nextjs";
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`
 */
const nextConfig: NextConfig = {
  experimental: {
    // 关闭静态优化以规避 16.2.7 global-error prerender bug
    staticGenerationRetryCount: 0,
  },
  images: {
    remotePatterns: [
      {
        protocol: "https",
        hostname: "platform-lookaside.fbsbx.com",
      },
      {
        protocol: "https",
        hostname: "graph.facebook.com",
      },
      {
        protocol: "https",
        hostname: "**.supabase.co",
        pathname: "/storage/v1/object/public/**",
      },
      {
        protocol: "https",
        hostname: "free.picui.cn",
      },
    ],
  },
};

export default withSentryConfig(withSerwist(nextConfig), {
 // For all available options, see:
 // https://www.npmjs.com/package/@sentry/webpack-plugin#options

 org: "shenzhen-banlv-zhidao-technolo",

 project: "javascript-nextjs",

 // Only print logs for uploading source maps in CI
 silent: !process.env.CI,

 // For all available options, see:
 // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/

 // Upload a larger set of source maps for prettier stack traces (increases build time)
 widenClientFileUpload: true,

 // Uncomment to route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers.
 // This can increase your server load as well as your hosting bill.
 // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client-
 // side errors will fail.
 // tunnelRoute: "/monitoring",

 webpack: {
   // Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.)
   // See the following for more information:
   // https://docs.sentry.io/product/crons/
   // https://vercel.com/docs/cron-jobs
   automaticVercelMonitors: true,

   // Tree-shaking options for reducing bundle size
   treeshake: {
     // Automatically tree-shake Sentry logger statements to reduce bundle size
     removeDebugLogging: true,
   },
 },
});
