import js from "@eslint/js";
import nextPlugin from "@next/eslint-plugin-next";
import tseslint from "@typescript-eslint/eslint-plugin";
import tsparser from "@typescript-eslint/parser";
import reactPlugin from "eslint-plugin-react";
import reactHooksPlugin from "eslint-plugin-react-hooks";

const eslintConfig = [
  {
    ignores: [
      ".next/**",
      "out/**",
      "build/**",
      "dist/**",
      "node_modules/**",
      "next-env.d.ts",
      "src/components/_unused/**", // Archived unused components
      "src/components/settings/AccountManagement/_legacy/**", // Legacy files
      "src/hooks/useCurrentTime.ts", // Demo hook
    ],
  },
  js.configs.recommended,
  {
    files: ["**/*.{js,jsx,mjs}"],
    plugins: {
      "@next/next": nextPlugin,
      "react": reactPlugin,
      "react-hooks": reactHooksPlugin,
    },
    rules: {
      ...nextPlugin.configs.recommended.rules,
      ...nextPlugin.configs["core-web-vitals"].rules,
    },
  },
  {
    files: ["**/*.{ts,tsx}"],
    languageOptions: {
      parser: tsparser,
      parserOptions: {
        ecmaVersion: "latest",
        sourceType: "module",
        ecmaFeatures: {
          jsx: true,
        },
      },
      globals: {
        React: "readonly",
        console: "readonly",
        process: "readonly",
        __dirname: "readonly",
        __filename: "readonly",
        Buffer: "readonly",
        localStorage: "readonly",
        window: "readonly",
        document: "readonly",
        HTMLButtonElement: "readonly",
        HTMLInputElement: "readonly",
        fetch: "readonly",
        URL: "readonly",
        RequestInit: "readonly",
        Response: "readonly",
        PageTransitionEvent: "readonly",
        setTimeout: "readonly",
        clearTimeout: "readonly",
        setInterval: "readonly",
        clearInterval: "readonly",
        alert: "readonly",
        confirm: "readonly",
        File: "readonly",
        FormData: "readonly",
        URLSearchParams: "readonly",
        HeadersInit: "readonly",
        HTMLTableElement: "readonly",
        HTMLTableSectionElement: "readonly",
        HTMLTableRowElement: "readonly",
        HTMLTableCellElement: "readonly",
        HTMLTableCaptionElement: "readonly",
        HTMLTextAreaElement: "readonly",
        HTMLCanvasElement: "readonly",
        HTMLDivElement: "readonly",
        HTMLElement: "readonly",
        HTMLImageElement: "readonly",
        ImageData: "readonly",
        Image: "readonly",
        prompt: "readonly",
        Audio: "readonly",
        Blob: "readonly",
        CSSStyleDeclaration: "readonly",
        CustomEvent: "readonly",
        Element: "readonly",
        ErrorEvent: "readonly",
        Event: "readonly",
        FileList: "readonly",
        FileReader: "readonly",
        Headers: "readonly",
        IntersectionObserver: "readonly",
        KeyboardEvent: "readonly",
        MouseEvent: "readonly",
        Node: "readonly",
        NodeJS: "readonly",
        PromiseRejectionEvent: "readonly",
        RequestCache: "readonly",
        ResizeObserver: "readonly",
        Storage: "readonly",
        cancelAnimationFrame: "readonly",
        crypto: "readonly",
        getComputedStyle: "readonly",
        google: "readonly",
        navigator: "readonly",
        requestAnimationFrame: "readonly",
        sessionStorage: "readonly",
      },
    },
    plugins: {
      "@typescript-eslint": tseslint,
      "@next/next": nextPlugin,
      "react": reactPlugin,
      "react-hooks": reactHooksPlugin,
    },
    rules: {
      ...tseslint.configs.recommended.rules,
      ...nextPlugin.configs.recommended.rules,
      ...nextPlugin.configs["core-web-vitals"].rules,
      "react/react-in-jsx-scope": "off",
      "@typescript-eslint/no-explicit-any": "warn",
      "@typescript-eslint/no-unused-vars": ["error", {
        "argsIgnorePattern": "^_",
        "varsIgnorePattern": "^_",
        "caughtErrorsIgnorePattern": "^_",
        "destructuredArrayIgnorePattern": "^_"
      }],
    },
  },
];

export default eslintConfig;
