import type { NextConfig } from "next";
import createNextIntlPlugin from "next-intl/plugin";
import withPWAInit from "@ducanh2912/next-pwa";

const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts");

const withPWA = withPWAInit({
  dest: "public",
  cacheOnFrontEndNav: true,
  aggressiveFrontEndNavCaching: true,
  reloadOnOnline: true,
  disable: process.env.NODE_ENV === "development",
  workboxOptions: {
    disableDevLogs: true,
    runtimeCaching: [
      // App shell: cache-first, very long TTL
      {
        urlPattern: /\/_next\/static\//,
        handler: "CacheFirst",
        options: {
          cacheName: "static-assets",
          expiration: { maxEntries: 200, maxAgeSeconds: 30 * 24 * 60 * 60 },
        },
      },
      // API: NetworkFirst — show cached data when offline
      {
        urlPattern: /\/api\//,
        handler: "NetworkFirst",
        options: {
          cacheName: "api-data",
          networkTimeoutSeconds: 5,
          expiration: { maxEntries: 300, maxAgeSeconds: 10 * 60 },
        },
      },
      // Menu images & media
      {
        urlPattern: /\.(?:png|jpg|jpeg|svg|gif|webp|ico)$/,
        handler: "StaleWhileRevalidate",
        options: {
          cacheName: "media-cache",
          expiration: { maxEntries: 300, maxAgeSeconds: 7 * 24 * 60 * 60 },
        },
      },
    ],
  },
});

const adminWebOrigin =
  process.env.ADMIN_WEB_ORIGIN ?? "http://localhost:3102";

const nextConfig: NextConfig = {
  output: "standalone",
  experimental: {
    optimizePackageImports: ["recharts", "lucide-react"],
  },
  async redirects() {
    return [
      {
        source: "/:locale(fa|ar|en)/admin",
        destination: `${adminWebOrigin}/:locale/admin`,
        permanent: false,
      },
      {
        source: "/:locale(fa|ar|en)/admin/:path*",
        destination: `${adminWebOrigin}/:locale/admin/:path*`,
        permanent: false,
      },
    ];
  },
};

export default withPWA(withNextIntl(nextConfig));
