import tsParser from '@typescript-eslint/parser';
import sharedConfig from '../shared/eslint.config.js';
import globals from 'globals';

export default [
	...sharedConfig,
	{
		ignores: ['**/node_modules', 'built', '@types/**/*', 'migration'],
	},
	{
		files: ['**/*.ts', '**/*.tsx'],
		languageOptions: {
			parserOptions: {
				parser: tsParser,
				project: ['./tsconfig.json', './test/tsconfig.json', './test-federation/tsconfig.json'],
				sourceType: 'module',
				tsconfigRootDir: import.meta.dirname,
			},
		},
		rules: {
			'import/order': ['warn', {
				groups: [
					'builtin',
					'external',
					'internal',
					'parent',
					'sibling',
					'index',
					'object',
					'type',
				],
				pathGroups: [{
					pattern: '@/**',
					group: 'external',
					position: 'after',
				}],
			}],
			'no-restricted-globals': ['error', {
				name: '__dirname',
				message: 'Not in ESModule. Use `import.meta.url` instead.',
			}, {
				name: '__filename',
				message: 'Not in ESModule. Use `import.meta.url` instead.',
			}],
			// https://typescript-eslint.io/rules/prefer-nullish-coalescing/
			'@typescript-eslint/prefer-nullish-coalescing': ['warn', {
				ignorePrimitives: {
					// Without this, the rule breaks for nullable booleans
					boolean: true,
				},
			}],
		},
	},
	{
		files: ['src/server/web/**/*.js', 'src/server/web/**/*.ts'],
		languageOptions: {
			globals: {
				...globals.browser,
				LANGS: true,
				CLIENT_ENTRY: true,
				LANGS_VERSION: true,
			},
		},
	},
	{
		ignores: [
			"**/lib/",
			"**/temp/",
			"**/built/",
			"**/coverage/",
			"**/node_modules/",
			"**/migration/",
		]
	},
];
