import '@testing-library/jest-dom/vitest';

import { cleanup } from '@testing-library/react';
import { afterEach, beforeEach, vi } from 'vitest';

/**
 * jsdom implementiert `matchMedia` nicht. Der Stub liefert standardmäßig
 * „trifft nicht zu“ für alle Media Queries – Tests, die ein bestimmtes
 * Systemverhalten prüfen wollen, überschreiben ihn gezielt.
 */
function matchMediaStubEinrichten(): void {
  vi.stubGlobal(
    'matchMedia',
    vi.fn((query: string): MediaQueryList => {
      const liste: MediaQueryList = {
        matches: false,
        media: query,
        onchange: null,
        addEventListener: vi.fn(),
        removeEventListener: vi.fn(),
        addListener: vi.fn(),
        removeListener: vi.fn(),
        dispatchEvent: vi.fn(() => false),
      };
      return liste;
    }),
  );
}

/**
 * Die Setup-Datei gilt für ALLE Testdateien – auch für solche mit
 * `@vitest-environment node` (z. B. tests/sicherheit.test.ts). Ohne DOM
 * werden die Aufräumschritte deshalb übersprungen.
 */
const mitDom = typeof window !== 'undefined';

beforeEach(() => {
  if (!mitDom) {
    return;
  }
  matchMediaStubEinrichten();
  window.localStorage.clear();
  document.documentElement.removeAttribute('data-thema');
});

afterEach(() => {
  if (mitDom) {
    cleanup();
  }
});
