import type { NextConfig } from "next";

/**
 * Header bảo mật gửi kèm MỌI phản hồi. Cố ý không đặt `script-src` trong CSP: Next.js cần script nội tuyến để hydrate,
 * siết quá tay sẽ làm trắng trang; các chỉ thị dưới đây chặn nhúng khung (clickjacking), chặn plugin và ép form/base về cùng nguồn mà không ảnh hưởng chức năng.
 * Định vị (check-in) và máy ảnh chỉ cho chính trang này dùng; micro không dùng tới nên tắt.
 */
const securityHeaders = [
  { key: "X-Frame-Options", value: "DENY" },
  { key: "X-Content-Type-Options", value: "nosniff" },
  { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
  { key: "Permissions-Policy", value: "camera=(self), geolocation=(self), microphone=()" },
  { key: "Content-Security-Policy", value: "frame-ancestors 'none'; base-uri 'self'; object-src 'none'; form-action 'self'" },
  // Chỉ có tác dụng khi truy cập qua HTTPS (trình duyệt bỏ qua ở HTTP), 180 ngày, không áp cho tên miền con khác của công ty.
  ...(process.env.NODE_ENV === "production" ? [{ key: "Strict-Transport-Security", value: "max-age=15552000" }] : []),
];

const nextConfig: NextConfig = {
  // Không khoe phiên bản framework cho người quét lỗ hổng.
  poweredByHeader: false,
  serverExternalPackages: ["@electric-sql/pglite", "exceljs"],
  experimental: {
    // Server Actions handle the Excel imports, which can exceed the 1 MB default.
    serverActions: { bodySizeLimit: "10mb" },
  },
  async headers() {
    return [{ source: "/:path*", headers: securityHeaders }];
  },
};

export default nextConfig;
