import { includeIgnoreFile } from '@eslint/compat';
import feedicFlatConfig from '@feedic/eslint-config';
import { commonTypeScriptRules } from '@feedic/eslint-config/typescript';
import tseslint from 'typescript-eslint';
import { defineConfig } from 'eslint/config';
import { fileURLToPath } from 'node:url';
import eslintConfigBiome from 'eslint-config-biome';

const gitignorePath = fileURLToPath(new URL('.gitignore', import.meta.url));

export default defineConfig([
  includeIgnoreFile(gitignorePath),
  {
    linterOptions: {
      reportUnusedDisableDirectives: 'error',
    },
  },
  {
    ignores: ['eslint.config.{js,cjs,mjs}'],
  },
  ...feedicFlatConfig,
  {
    rules: {
        "jsdoc/tag-lines": [
            2,
            "any",
            {
                "startLines": 1
            }
        ],
        "jsdoc/check-tag-names": [
            2,
            {
                "definedTags": [
                    "category"
                ]
            }
        ]
    },
  },
  {
    files: [
        "**/*.ts"
    ],
    extends: [...tseslint.configs.recommended],
    languageOptions: {
      parser: tseslint.parser,
      parserOptions: {
          "sourceType": "module",
          "project": "./tsconfig.eslint.json"
      },
    },
    rules: {
      ...commonTypeScriptRules,
      "@typescript-eslint/prefer-nullish-coalescing": 0,
      "n/no-unsupported-features/es-builtins": 0,
      "unicorn/no-array-callback-reference": 0,
      "unicorn/no-array-reduce": 0,
      "unicorn/prefer-includes": 0
    },
  },
  eslintConfigBiome
]);
