// @ts-check
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
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,
    {
        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'
                }
            ],
            quotes: [
                'error',
                'single',
                {
                    allowTemplateLiterals: true
                }
            ],
            semi: 'error',
            indent: [
                'error',
                4,
                {
                    SwitchCase: 1
                }
            ],
            eqeqeq: 'error'
        }
    },
    {
        ignores: [
            'build/',
            'node_modules/'
        ]
    },
    {
        files: [
            'src/test/**/*'
        ],
        rules: {
            '@typescript-eslint/no-floating-promises': 'off'
        }
    }
);