import nextCoreWebVitals from 'eslint-config-next/core-web-vitals';
import prettier from 'eslint-config-prettier/flat';

const eslintConfig = [
  ...nextCoreWebVitals,
  prettier,
  {
    rules: {
      '@typescript-eslint/no-explicit-any': 'error',
      '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
      // React Compiler safety rules shipped with eslint-config-next@16 /
      // react-hooks@7. Triage status (2026-05-13 sweep):
      //   purity, set-state-in-render, immutability, refs,
      //   set-state-in-effect — promoted to error after the cleanup
      //   sweep (Wave 3 of the 2026-05-12 audit). All hits migrated to
      //   either useQuery, render-phase derivation, key-based remount,
      //   or a justified eslint-disable for canonical setState-on-
      //   subscription patterns. New regressions block CI.
      //   incompatible-library — informational only ("Compiler
      //   skipped this file because of a non-Compiler-safe import").
      //   No action needed; silenced to keep `pnpm lint` output
      //   actionable.
      'react-hooks/purity': 'error',
      'react-hooks/set-state-in-render': 'error',
      'react-hooks/immutability': 'error',
      'react-hooks/refs': 'error',
      'react-hooks/set-state-in-effect': 'error',
      'react-hooks/incompatible-library': 'off',
    },
  },
  {
    // Tests assert response shape via expect() — narrowing every
    // `res.json()` to a structural type adds boilerplate without catching
    // bugs. Allow `any` casts at JSON boundaries in test files.
    files: ['tests/**/*.ts', 'tests/**/*.tsx'],
    rules: {
      '@typescript-eslint/no-explicit-any': 'off',
    },
  },
  {
    ignores: ['client-portal/**', 'next-env.d.ts'],
  },
];

export default eslintConfig;
