/**
 * ESLint 9 Flat Config
 * Migration from .eslintrc.js
 */

import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import prettier from 'eslint-config-prettier';
import security from 'eslint-plugin-security';
import sonarjs from 'eslint-plugin-sonarjs';

export default tseslint.config(
  js.configs.recommended,
  ...tseslint.configs.recommended,
  prettier,
  {
    plugins: {
      security,
      sonarjs,
    },
    languageOptions: {
      parserOptions: {
        ecmaVersion: 2022,
        sourceType: 'module',
      },
    },
        rules: {
          '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
          '@typescript-eslint/explicit-function-return-type': 'warn',
          '@typescript-eslint/no-explicit-any': 'error',
          'security/detect-object-injection': 'warn',
          // Temporarily disabled due to ESLint 9 compatibility issues
          // 'security/detect-non-literal-regexp': 'warn',
          'sonarjs/cognitive-complexity': ['warn', 15],
        },
  },
  // Type-checked config for packages with tsconfig.json
  ...tseslint.configs.recommendedTypeChecked.map((config) => ({
    ...config,
    languageOptions: {
      ...config.languageOptions,
      parserOptions: {
        ...config.languageOptions?.parserOptions,
        project: ['./tsconfig.json', './packages/*/tsconfig.json', './apps/*/tsconfig.json', './services/*/tsconfig.json'],
        tsconfigRootDir: import.meta.dirname,
      },
    },
  })),
  {
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.json', './packages/*/tsconfig.json', './apps/*/tsconfig.json', './services/*/tsconfig.json'],
        tsconfigRootDir: import.meta.dirname,
      },
    },
    rules: {
      '@typescript-eslint/no-floating-promises': 'error',
      '@typescript-eslint/await-thenable': 'error',
    },
  },
  {
    ignores: ['node_modules', 'dist', 'build', '.next', 'coverage', '**/*.config.js'],
  }
);

