// ESLint (R0.12) — config unique du monorepo (flat config, ESLint 9).
// Porte notamment la règle d'architecture ADR-001 : le SDK MinIO ne
// s'importe QUE dans l'implémentation de FileStorage.
import eslint from '@eslint/js';
import reactHooks from 'eslint-plugin-react-hooks';
import tseslint from 'typescript-eslint';

export default tseslint.config(
  {
    ignores: [
      '**/dist/**',
      '**/node_modules/**',
      '**/*.d.ts',
      '**/coverage/**',
      'docs/**',
      '**/*.config.{js,mjs,ts}',
      'apps/api/jest.config.js',
    ],
  },
  eslint.configs.recommended,
  ...tseslint.configs.recommended,
  {
    rules: {
      '@typescript-eslint/no-unused-vars': [
        'error',
        { argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
      ],
      // ADR-001 : MinIO derrière l'interface FileStorage, jamais en direct
      'no-restricted-imports': [
        'error',
        {
          paths: [
            {
              name: 'minio',
              message:
                'Import direct du SDK MinIO interdit (ADR-001) : passez par l’interface FileStorage (apps/api/src/files).',
            },
          ],
        },
      ],
    },
  },
  {
    // Seul fichier autorisé : l'implémentation MinIO de FileStorage
    files: ['apps/api/src/files/minio-storage.service.ts'],
    rules: { 'no-restricted-imports': 'off' },
  },
  {
    files: ['apps/web/**/*.{ts,tsx}', 'apps/mobile/**/*.{ts,tsx}'],
    plugins: { 'react-hooks': reactHooks },
    rules: {
      'react-hooks/rules-of-hooks': 'error',
      'react-hooks/exhaustive-deps': 'error',
    },
  },
);
