import globals from 'globals';
import pluginJs from '@eslint/js';
import tseslint from 'typescript-eslint';
import pluginReact from 'eslint-plugin-react';
import { defineConfig, globalIgnores } from "eslint/config";

/** @type {import('eslint').Linter.Config[]} */
export default defineConfig([
    globalIgnores(["**/*.test.ts"]),
    {
        languageOptions: {
            globals: globals.browser,
            parserOptions: {
                projectService: true,
                tsconfigRootDir: import.meta.dirname,
            },
        },
    },
    pluginJs.configs.recommended,
    ...tseslint.configs.strictTypeChecked,
    pluginReact.configs.flat.recommended,
    {
        name: 'my-own-project-name',
        rules: {
            'no-extra-boolean-cast': 'off',
            'max-len': 200,
            '@typescript-eslint/no-unused-vars': 'warn',
            '@typescript-eslint/no-explicit-any': 'error',        // Ban explicit `any`
            '@typescript-eslint/no-unsafe-argument': 'error',     // Prevent passing `any` to functions
            '@typescript-eslint/no-unsafe-assignment': 'error',   // Prevent assigning `any` to variables
            '@typescript-eslint/no-unsafe-member-access': 'error',// Prevent accessing members of `any`
            '@typescript-eslint/no-unsafe-return': 'error',       // Prevent returning `any` from functions
            // Каждое свойство JSX начинается с новой строки
            "react/jsx-first-prop-new-line": ["error", "always"],
            // Максимум 1 свойство на строку
            "react/jsx-max-props-per-line": ["error", {
                "maximum": 1,
                "when": "always"
            }],
            // Закрывающая скобка выравнивается с открывающим тегом
            "react/jsx-closing-bracket-location": ["error", "tag-aligned"],
            // Отступ для свойств (опционально, настройте под ваш стиль)
            "react/jsx-indent-props": ["error", 2],
            "max-len": ["error", {
                "code": 120,             // Максимальная длина строки (по умолчанию 80)
                // "ignoreComments": true,  // Игнорировать комментарии
                // "ignoreUrls": true,      // Игнорировать URL-адреса
                // "ignoreStrings": true,   // Игнорировать строки в кавычках
                // "ignoreTemplateLiterals": true, // Игнорировать шаблонные строки (${...})
                // "ignoreRegExpLiterals": true    // Игнорировать регулярные выражения
            }]
        }
    }
]);