import eslint from "@eslint/js";
import { defineConfig, globalIgnores } from "eslint/config";
import eslintConfigPrettier from "eslint-config-prettier/flat";
import tseslint from "typescript-eslint";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import pluginRouter from "@tanstack/eslint-plugin-router";

export default defineConfig([
  globalIgnores([
    "**/dist/**",
    "node_modules/",
    "eslint.config.mjs",
    "**/*.config.ts",
    "routeTree.gen.ts",
    "scripts/**",
    "data-pipeline/**/*",
  ]),

  eslint.configs.recommended,
  tseslint.configs.recommendedTypeChecked,
  eslintConfigPrettier,

  {
    languageOptions: {
      parserOptions: {
        projectService: true,
        tsconfigRootDir: import.meta.dirname,
      },
    },
  },

  {
    files: ["apps/web/**/*.{ts,tsx}"],
    extends: [
      ...pluginRouter.configs["flat/recommended"],
      reactHooks.configs.flat.recommended,
      reactRefresh.configs.vite,
    ],
  },
  {
    files: ["apps/web/src/routes/**/*.{ts,tsx}"],
    rules: {
      "react-refresh/only-export-components": "off",
      "@typescript-eslint/only-throw-error": "off",
    },
  },
  {
    rules: {
      "@typescript-eslint/no-unused-vars": [
        "error",
        {
          argsIgnorePattern: "^_",
          varsIgnorePattern: "^_",
          caughtErrorsIgnorePattern: "^_",
        },
      ],
    },
  },
  {
    // better-auth's createAuthClient return type is insufficiently typed upstream.
    // This is a known issue: https://github.com/better-auth/better-auth/issues
    files: ["apps/web/src/lib/auth-client.ts"],
    rules: { "@typescript-eslint/no-unsafe-assignment": "off" },
  },
]);
