import { defineConfig, globalIgnores } from "eslint/config";
import nextVitals from "eslint-config-next/core-web-vitals";
import nextTs from "eslint-config-next/typescript";

const eslintConfig = defineConfig([
  ...nextVitals,
  ...nextTs,
  // Override default ignores of eslint-config-next.
  globalIgnores([
    // Default ignores of eslint-config-next:
    ".next/**",
    "out/**",
    "build/**",
    "next-env.d.ts",
    // Non-TS scripts
    "screenshot-dashboard.js",
    // Generated directories
    "coverage/**",
  ]),
  // Fix ESLint v10 compat issue with bundled eslint-plugin-react in eslint-config-next.
  // The plugin uses context.getFilename() (removed in ESLint 10) during React version
  // detection. Providing the version explicitly skips the filesystem detection call.
  {
    settings: {
      react: { version: "19.0" },
    },
  },
  // Relax rules for test files — mocks require `as any` casts
  {
    files: ["src/__tests__/**", "e2e/**"],
    rules: {
      "@typescript-eslint/no-explicit-any": "off",
      "@typescript-eslint/no-unused-vars": "warn",
      "no-unused-vars": "off",
    },
  },
]);

export default eslintConfig;
