const rules = {
  'no-lonely-if': 'off',
  'no-bitwise': 'off',
  'import/no-extraneous-dependencies': 'off',
  'no-nested-ternary': 'off',
  'no-constructor-return': 'off',
  'default-param-last': 'off',
  'no-param-reassign': [
    'error',
    {
      props: false,
    },
  ],
  'no-mixed-operators': [
    'error',
    {
      // the list of arthmetic groups disallows mixing `%` and `**`
      // with other arithmetic operators.
      groups: [
        ['%', '**'],
        ['%', '+'],
        ['%', '-'],
        ['%', '*'],
        ['%', '/'],
        ['&', '|', '<<', '>>', '>>>'],
        ['==', '!=', '===', '!=='],
        ['&&', '||'],
      ],
      allowSamePrecedence: false,
    },
  ],
  'no-underscore-dangle': ['off'],
  'prefer-destructuring': ['off'],
  'prefer-object-spread': ['off'],
  'prefer-ob': ['off'],
  'react/react-in-jsx-scope': ['off'],
  'react/no-string-refs': ['off'],
  'react/prop-types': ['off'],
  'no-restricted-globals': ['error', 'window', 'document'],
  'import/prefer-default-export': 'off',
  'import/no-unresolved': [2, { ignore: ['ssr-window', 'framework7-svelte', 'swiper/svelte'] }],
};

module.exports = {
  root: true,
  settings: {
    react: {
      version: 'detect',
    },
  },
  env: {
    browser: true,
    es6: true,
    node: true,
  },

  globals: {
    XMLHttpRequest: true,
    Blob: true,
    Document: true,
    FormData: true,
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 2019,
    sourceType: 'module',
  },
  rules: {
    ...rules,
  },
  overrides: [
    // Core + REACT
    {
      files: ['**/*.jsx', '**/*.js', '**/*.ts'],
      extends: ['plugin:react/recommended', 'airbnb-base', 'plugin:prettier/recommended'],
      plugins: ['react'],
      rules: {
        ...rules,
        'import/extensions': [2, { js: 'always', jsx: 'always', json: 'always' }],
      },
    },
    {
      files: ['**/*.jsx', 'src/react/shared/*.js'],
      rules: {
        ...rules,
        'import/no-unresolved': ['off'],
        'import/no-extraneous-dependencies': ['off'],
        'no-dupe-keys': ['off'],
        'import/extensions': [2, { js: 'always' }],
      },
    },
    // Core
    {
      files: ['src/core/**/*.js'],
      extends: ['plugin:react/recommended', 'airbnb-base', 'plugin:prettier/recommended'],
      plugins: ['react'],
      rules: {
        ...rules,
        'react/no-unknown-property': ['off'],
        'react/jsx-key': ['off'],
        'import/extensions': [2, { js: 'always' }],
      },
    },

    // REACT KITCHEN_SINK
    {
      files: ['kitchen-sink/react/src/**/*.jsx', 'kitchen-sink/react/src/**/*.js'],
      rules: {
        ...rules,
        'react/display-name': ['off'],
        'react/jsx-no-target-blank': ['off'],
        'react/no-unescaped-entities': ['off'],
        'no-console': ['off'],
        'no-restricted-globals': ['off'],
        'no-nested-ternary': ['off'],
        'import/no-unresolved': ['off'],
        'import/no-extraneous-dependencies': ['off'],
      },
    },
    // VUE
    {
      files: ['**/*.vue'],
      plugins: ['vue'],
      extends: ['plugin:vue/vue3-recommended', 'airbnb-base', 'plugin:prettier/recommended'],
      rules: {
        ...rules,
        'vue/component-definition-name-casing': ['error', 'kebab-case'],
        'vue/require-default-prop': ['off'],
        'vue/custom-event-name-casing': ['off'],
        'prefer-destructuring': ['off'],
        'no-restricted-globals': ['off'],
        'vue/multi-word-component-names': 'off',
        'vue/no-deprecated-slot-attribute': 'off',
      },
    },
    {
      files: ['**/*.vue', 'src/vue/shared/*.js'],
      rules: {
        ...rules,
        'import/no-unresolved': ['off'],
        'import/no-extraneous-dependencies': ['off'],
        'import/extensions': ['off'],
        'no-restricted-globals': ['off'],
        'vue/multi-word-component-names': 'off',
        'vue/no-deprecated-slot-attribute': 'off',
      },
    },
    // SVELTE KITCHEN_SINK
    {
      files: ['kitchen-sink/svelte/src/**/*.js'],
      rules: {
        ...rules,
        'no-restricted-globals': ['off'],
        'import/no-unresolved': ['off'],
        'import/no-extraneous-dependencies': ['off'],
      },
    },

    // SVELTE
    {
      plugins: [],
      files: ['**/*.svelte'],
      extends: ['airbnb-base', 'plugin:svelte/prettier'],
      // parser: '@babel/eslint-parser',
      // // Add an `overrides` section to add a parser configuration for svelte.
      // overrides: [
      //   {
      //     files: ['*.svelte'],
      //     parser: 'svelte-eslint-parser',
      //   },
      //   // ...
      // ],
      rules: {
        ...rules,
        'no-restricted-globals': ['off'],
        'object-curly-newline': ['off'],
        curly: ['off'],
        indent: ['off'],
        'operator-linebreak': ['off'],
        'nonblock-statement-body-position': ['off'],
        'import/no-mutable-exports': ['off'],
        'import/first': ['off'],
        'import/no-unresolved': ['off'],
        'import/no-extraneous-dependencies': ['off'],
        'import/prefer-default-export': ['off'],
        'import/extensions': ['off'],
        'no-multiple-empty-lines': ['off'],
        'no-undef-init': ['off'],
        'no-shadow': ['off'],
        'no-nested-ternary': ['off'],
        'a11y-invalid-attribute': ['off'],
        'a11y-missing-attribute': ['off'],
        'max-len': ['off'],
      },
    },
    {
      files: ['kitchen-sink/svelte/src/**/*.svelte'],
      rules: {
        ...rules,
        'no-console': ['off'],
        'no-return-assign': ['off'],
        'implicit-arrow-linebreak': ['off'],
        'no-restricted-globals': ['off'],
      },
    },
  ],
};