import { defineConfig, globalIgnores } from "eslint/config";
import globals from "globals";
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
    baseDirectory: __dirname,
    recommendedConfig: js.configs.recommended,
    allConfig: js.configs.all
});

export default defineConfig([globalIgnores(["**/*.min.js"]), {
    extends: compat.extends("eslint:recommended"),
    languageOptions: {
        globals: {
            ...globals.browser,
            ...globals.jquery,
            ...globals.webextensions,
            _called: "readonly",
            acceptedOTPFields: "readonly",
            assertInputFields: "readonly",
            assertPasswordChangeFields: "readonly",
            assertRegex: "readonly",
            assertSearchField: "readonly",
            assertSearchForm: "readonly",
            assertTOTPField: "readonly",
            AssociatedAction: "readonly",
            AuthenticatorAssertionResponse: "readonly",
            AuthenticatorAttestationResponse: "readonly",
            Autocomplete: "readonly",
            BannerPosition: "readonly",
            BLUE_BUTTON: "readonly",
            bootstrap: "readonly",
            browser: "readonly",
            browserAction: "readonly",
            CHECK_UPDATE_NEVER: "readonly",
            CHECK_UPDATE_ONE_MONTH: "readonly",
            CHECK_UPDATE_ONE_WEEK: "readonly",
            CHECK_UPDATE_THREE_DAYS: "readonly",
            cloneInto: "readonly",
            compareVersion: "readonly",
            createResult: "readonly",
            createStylesheet: "readonly",
            DatabaseState: "readonly",
            debugLogMessage: "readonly",
            DEFINED_CUSTOM_FIELDS: "readonly",
            elementsOverlap: "readonly",
            EXTENSION_NAME: "readonly",
            getCurrentTab: "readonly",
            getIconClass: "readonly",
            getLoginData: "readonly",
            getTopLevelDomainFromUrl: "readonly",
            GRAY_BUTTON_CLASS: "readonly",
            GREEN_BUTTON: "readonly",
            httpAuth: "readonly",
            Icon: "readonly",
            IGNORE_AUTOSUBMIT: "readonly",
            IGNORE_FULL: "readonly",
            IGNORE_NORMAL: "readonly",
            IGNORE_NOTHING: "readonly",
            IGNORE_PASSKEYS: "readonly",
            importScripts: "readonly",
            IMPROVED_DETECTION_PREDEFINED_SITELIST: "readonly",
            initColorTheme: "readonly",
            isEdge: "readonly",
            isElementInside: "readonly",
            isFirefox: "readonly",
            isIframeAllowed: "readonly",
            isSafari: "readonly",
            keepass: "readonly",
            keepassClient: "readonly",
            kpActions: "readonly",
            kpErrors: "readonly",
            kpxc: "readonly",
            kpxcAssert: "readonly",
            kpxcBanner: "readonly",
            kpxcCustomLoginFieldsBanner: "readonly",
            kpxcEvent: "readonly",
            kpxcFields: "readonly",
            kpxcFill: "readonly",
            kpxcForm: "readonly",
            kpxcIcons: "readonly",
            kpxcObserverHelper: "readonly",
            kpxcPasswordGenerator: "readonly",
            kpxcPasswordIcons: "readonly",
            kpxcSites: "readonly",
            kpxcTOTPAutocomplete: "readonly",
            kpxcTOTPIcons: "readonly",
            kpxcUI: "readonly",
            kpxcUserAutocomplete: "readonly",
            kpxcUsernameIcons: "readonly",
            logDebug: "readonly",
            logError: "readonly",
            kpxcPasskeysUtils: "readonly",
            ManualFill: "readonly",
            matchesWithNodeName: "readonly",
            MAX_AUTOCOMPLETE_NAME_LEN: "readonly",
            MAX_OPACITY: "readonly",
            MAX_TOTP_INPUT_LENGTH: "readonly",
            menuContexts: "readonly",
            MIN_INPUT_FIELD_OFFSET_WIDTH: "readonly",
            MIN_INPUT_FIELD_WIDTH_PX: "readonly",
            MIN_OPACITY: "readonly",
            MIN_TOTP_INPUT_LENGTH: "readonly",
            module: "readonly",
            nacl: "readonly",
            OBSERVER_OPTIONS: "readonly",
            ORANGE_BUTTON: "readonly",
            page: "readonly",
            Pixels: "readonly",
            PublicKeyCredential: "readonly",
            PREDEFINED_SITELIST: "readonly",
            RED_BUTTON: "readonly",
            retrieveColorScheme: "readonly",
            sendMessage: "readonly",
            showNotification: "readonly",
            siteMatch: "readonly",
            SitePreferences: "readonly",
            slashNeededForUrl: "readonly",
            SORT_BY_GROUP_AND_TITLE: "readonly",
            SORT_BY_GROUP_AND_USERNAME: "readonly",
            SORT_BY_MATCHING_CREDENTIALS_SETTING: "readonly",
            SORT_BY_RELEVANT_ENTRY: "readonly",
            SORT_BY_TITLE: "readonly",
            SORT_BY_USERNAME: "readonly",
            statusResponse: "readonly",
            Tests: "readonly",
            tr: "readonly",
            trimURL: "readonly",
            updateDefaultPasswordManager: "readonly",
        },
        ecmaVersion: 13,
        sourceType: "script",
    },
    rules: {
        "array-bracket-spacing": ["error", "always"],
        "arrow-body-style": "warn",
        "arrow-parens": "off",
        "arrow-spacing": "warn",
        "block-scoped-var": "off",
        "brace-style": ["warn", "1tbs"],
        "camelcase": "warn",
        "class-methods-use-this": "off",
        "comma-dangle": "off",
        "computed-property-spacing": ["error", "never"],
        "consistent-return": "off",
        "dot-notation": "off",
        "eqeqeq": "error",
        "func-names": "off",
        "function-paren-newline": "off",
        "guard-for-in": "off",
        "implicit-arrow-linebreak": "off",
        "indent": ["error", 4],
        "linebreak-style": ["error", "unix"],
        "lines-around-comment": "off",
        "max-len": "off",
        "no-alert": "error",
        "no-await-in-loop": "off",
        "no-bitwise": "off",
        "no-console": "off",
        "no-continue": "off",
        "no-control-regex": "off",
        "no-else-return": "off",
        "no-empty-function": ["error", {
            "allow": ["arrowFunctions", "methods", "asyncMethods"],
        }],
        "no-extend-native": "off",
        "no-global-assign": "off",
        "no-lonely-if": "off",
        "no-loop-func": "off",
        "no-mixed-operators": "off",
        "no-mixed-spaces-and-tabs": ["error", "smart-tabs"],
        "no-multi-spaces": "warn",
        "no-param-reassign": "off",
        "no-plusplus": "off",
        "no-prototype-builtins": "off",
        "no-redeclare": "off",
        "no-restricted-globals": "off",
        "no-restricted-syntax": "off",
        "no-return-await": "off",
        "no-tabs": "warn",
        "no-underscore-dangle": "off",
        "no-unused-vars": ["warn", {
            "args": "none",
            "caughtErrorsIgnorePattern": "^_",
            "varsIgnorePattern": "[A-Z_]+|tr|[$]",
        }],
        "no-use-before-define": "off",
        "no-useless-escape": "off",
        "no-useless-return": "off",
        "no-var": "error",
        "object-curly-spacing": ["warn", "always"],
        "object-shorthand": "off",
        "operator-linebreak": "off",
        "prefer-arrow-callback": "off",
        "prefer-const": "warn",
        "prefer-destructuring": "off",
        "prefer-template": "off",
        "quote-props": "off",
        "quotes": ["error", "single", {
            "avoidEscape": true,
        }],
        "semi": ["error", "always"],
        "space-before-blocks": "warn",
        "space-before-function-paren": "off",
        "space-in-parens": ["error", "never"],
        "space-unary-ops": "off",
        "spaced-comment": "off",
        "strict": "off",
        "vars-on-top": "off",
    },
}]);
