{
  "env": {
    "es6": true,
    "node": true
  },
  "plugins": [
    "prettier"
  ],
  "extends": [
    "airbnb-base",
    "next/core-web-vitals",
    "plugin:react/recommended",
    "plugin:react-hooks/recommended",
    "plugin:jsx-a11y/recommended",
    "plugin:prettier/recommended"
  ],
  "rules": {
    "prettier/prettier": [
      "error",
      {
        "singleQuote": true,
        "endOfLine": "auto",
        "plugins": [
          "prettier-plugin-tailwindcss"
        ]
      }
    ]
  },
  "overrides": [
    // Configuration for TypeScript files
    {
      "files": [
        "**/*.ts",
        "**/*.tsx"
      ],
      "plugins": [
        "@typescript-eslint",
        "unused-imports"
      ],
      "extends": [
        "airbnb-typescript",
        "next/core-web-vitals",
        "plugin:prettier/recommended"
      ],
      "parserOptions": {
        "project": "./tsconfig.json"
      },
      "rules": {
        "react/destructuring-assignment": "off",
        // Vscode doesn't support automatically destructuring, it's a pain to add a new variable
        "jsx-a11y/anchor-is-valid": "off",
        // Next.js use his own internal link system
        "react/require-default-props": "off",
        // Allow non-defined react props as undefined
        "react/jsx-props-no-spreading": "off",
        // _app.tsx uses spread operator and also, react-hook-form
        "@next/next/no-img-element": "off",
        // We are currently not using next/image because it isn't supported with SSG mode
        "import/order": [
          "error",
          {
            "groups": [
              "builtin",
              "external",
              "internal"
            ],
            "pathGroups": [
              {
                "pattern": "react",
                "group": "external",
                "position": "before"
              }
            ],
            "pathGroupsExcludedImportTypes": [
              "react"
            ],
            "newlines-between": "never",
            "alphabetize": {
              "order": "asc",
              "caseInsensitive": true
            }
          }
        ],
        "@typescript-eslint/no-use-before-define": "off",
        "@typescript-eslint/comma-dangle": "off",
        // Avoid conflict rule between Eslint and Prettier
        "import/prefer-default-export": "off",
        // Named export is easier to refactor automatically
        "class-methods-use-this": "off",
        // _document.tsx use render method without `this` keyword
        "@typescript-eslint/no-unused-vars": "off",
        "unused-imports/no-unused-imports": "warn",
        "unused-imports/no-unused-vars": [
          "warn",
          {
            "argsIgnorePattern": "^_"
          }
        ],
        "jsx-a11y/click-events-have-key-events": "off",
        "jsx-a11y/no-static-element-interactions": "off",
        "eqeqeq": "warn",
        "no-unsafe-optional-chaining": "warn",
        "no-param-reassign": "warn",
        "react-hooks/exhaustive-deps": "off"
      }
    }
  ]
}
