import { resolve } from 'node:path';

import react from '@vitejs/plugin-react';
import { defineConfig } from 'vitest/config';

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@renderer': resolve(__dirname, 'src/renderer/src'),
      '@shared': resolve(__dirname, 'src/shared'),
    },
  },
  test: {
    // Unit-Tests laufen in jsdom; die E2E-Tests (Playwright, echtes Electron)
    // liegen unter e2e/ und werden hier bewusst ausgeschlossen.
    environment: 'jsdom',
    globals: false,
    include: ['tests/**/*.test.{ts,tsx}'],
    exclude: ['node_modules/**', 'out/**', 'e2e/**'],
    setupFiles: ['./tests/setup.ts'],
    restoreMocks: true,
    coverage: {
      provider: 'v8',
      reportsDirectory: 'coverage',
      include: ['src/**/*.{ts,tsx}'],
      exclude: ['src/**/*.d.ts'],
      /*
        Die Schwellen sind eine Sperre gegen Rückschritt, kein Wunschwert.

        Erstmessung am 27.08.2026, Stand 0.21.0 (1235 Tests in 46 Dateien):
        Statements 77,87 – Branches 73,59 – Functions 77,11 – Lines 77,86.
        Nach dem Schließen der Lücke in `pruefung/bogen.ts` und mit den
        Tests desselben Tages (1260 Tests in 47 Dateien): Statements 78,68 –
        Branches 73,93 – Functions 78,04 – Lines 78,62.

        Eingetragen ist bewusst die niedrigere Erstmessung, abgerundet: Sie
        hält auch dann, wenn gerade laufende Arbeiten am Baum die Zahlen
        kurzzeitig drücken. Eine Schwelle, die beim ersten Lauf rot ist,
        wird abgeschaltet und bewacht danach gar nichts mehr – dieselbe
        Überlegung wie bei den stummen Wachen. Sobald der Baum ruhig ist,
        dürfen die Zahlen auf die höhere Messung nachgezogen werden.

        Wer die Abdeckung hebt, darf die Zahlen nachziehen; wer sie senkt,
        muss es begründen. Absichtlich nicht bei 100: Der Hauptprozess
        (Fenster, Menü, Dialoge, Druck) wird von Playwright gefahren, nicht
        von Vitest, und taucht hier deshalb als Lücke auf, obwohl er geprüft
        ist – siehe docs/stand.md.
      */
      thresholds: {
        statements: 77,
        branches: 73,
        functions: 76,
        lines: 77,
      },
    },
  },
});
