import { defineConfig } from "vitest/config";
import { fileURLToPath } from "url";

export default defineConfig({
  resolve: {
    alias: {
      "@": fileURLToPath(new URL("./src", import.meta.url)),
    },
  },
  test: {
    environment: "node",
    globals: true,
    setupFiles: ["./vitest.setup.ts"],
    include: [
      "src/**/*.test.ts",
      "src/**/__tests__/**/*.test.ts",
      "tests/unit/**/*.test.ts",
    ],
    coverage: {
      provider: "v8",
      // Querschnitt-Kern muss hoch abgedeckt sein (Definition of Done #7):
      // die REINE, offline testbare Logik in src/lib/search und src/lib/geo
      // >= 90 %. Reine I/O-Wrapper (DB-Queries via Drizzle, HTTP zu
      // Nominatim/OSRM) sowie reine Typ-Module sind hier ausgenommen: sie
      // brauchen ein laufendes Postgres bzw. erreichbare Dienste und werden
      // über Integrations-/E2E-Tests abgesichert (im Sandbox deferred, da
      // kein Postgres/Server verfügbar).
      include: ["src/lib/search/**", "src/lib/geo/**"],
      exclude: [
        // Reine Typdefinitionen (keine ausführbaren Zeilen).
        "src/lib/search/types.ts",
        "src/lib/geo/types.ts",
        // DB-gebundene Query-Builder (Drizzle gegen Postgres).
        "src/lib/search/facets.ts",
        "src/lib/search/query-brigades.ts",
        "src/lib/search/query-equipment.ts",
        "src/lib/search/query-vehicles.ts",
        "src/lib/geo/candidates.ts",
        // Externe HTTP-Dienste (Nominatim-Geocoding, OSRM-Routing).
        "src/lib/geo/nominatim.ts",
        "src/lib/geo/osrm.ts",
      ],
      // Per-Datei statt global: jede eingeschlossene reine-Logik-Datei muss
      // die Schwelle selbst erreichen (kein Verwässern über den Durchschnitt).
      thresholds: {
        perFile: true,
        lines: 90,
        functions: 90,
        statements: 90,
        branches: 80,
      },
    },
  },
});
