import { readdirSync } from "node:fs";
import { join } from "node:path";
import type { NextConfig } from "next";
import {
  legacySitemapRedirects,
  legacyUploadRedirects,
} from "./src/content/legacy-uploads";
import { redirectMap } from "./src/content/routes";

const config: NextConfig = {
  reactCompiler: false,
  devIndicators: false,
  poweredByHeader: false,
  experimental: { inlineCss: true },
  skipTrailingSlashRedirect: true,
  redirects: async () => [
    ...redirectMap,
    ...legacyUploadRedirects(
      readdirSync(join(process.cwd(), "public", "images")),
    ),
    ...legacySitemapRedirects,
  ],
  headers: async () => [
    {
      source: "/:path*",
      headers: [
        { key: "X-Content-Type-Options", value: "nosniff" },
        { key: "X-Frame-Options", value: "DENY" },
      ],
    },
    {
      source: "/:path((?!api(?:/|$)).*)",
      headers: [
        {
          key: "Content-Security-Policy",
          value:
            "base-uri 'self'; object-src 'none'; frame-ancestors 'none'; form-action 'self'",
        },
        { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
      ],
    },
    {
      source: "/staff/:path*",
      headers: [
        { key: "Cache-Control", value: "no-store, private" },
        { key: "Referrer-Policy", value: "no-referrer" },
        { key: "X-Robots-Tag", value: "noindex, nofollow" },
      ],
    },
  ],
  images: { formats: ["image/webp"] },
};

export default config;
