// @ts-check
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import stylistic from '@stylistic/eslint-plugin';
import * as path from 'node:path';
import * as url from 'node:url';

export default tseslint.config(
    eslint.configs.recommended,
    tseslint.configs.strictTypeChecked,
    tseslint.configs.stylisticTypeChecked,
    stylistic.configs.recommended,
    {
        languageOptions: {
            parserOptions: {
                projectService: {
                    allowDefaultProject: [
                        'eslint.config.mjs'
                    ]
                },
                tsconfigRootDir: path.dirname(url.fileURLToPath(import.meta.url))
            }
        },
        rules: {
            '@typescript-eslint/no-unnecessary-condition': [
                'error',
                {
                    allowConstantLoopConditions: 'only-allowed-literals'
                }
            ],
            '@stylistic/quotes': [
                'error',
                'single',
                {
                    allowTemplateLiterals: true
                }
            ],
            '@stylistic/indent': [
                'error',
                4,
                {
                    SwitchCase: 1
                }
            ],
            '@stylistic/comma-dangle': [
                'error',
                'never'
            ],
            '@stylistic/quote-props': [
                'error',
                'as-needed'
            ],
            '@stylistic/semi': [
                'error',
                'always'
            ],
            '@stylistic/eol-last': [
                'error',
                'never'
            ],
            '@stylistic/lines-between-class-members': 'off',
            '@stylistic/object-curly-spacing': 'off',
            '@stylistic/brace-style': [
                'error',
                '1tbs'
            ],
            eqeqeq: 'error'
        }
    },
    {
        ignores: [
            'build/',
            'node_modules/'
        ]
    },
    {
        files: [
            'src/test/**/*'
        ],
        rules: {
            '@typescript-eslint/no-floating-promises': 'off'
        }
    }
);