/**
 * Testaufbau. jsdom kennt matchMedia nicht — die App fragt es aber ab, um
 * zwischen Handy- und Flächenlayout zu wählen. `bildschirmbreiteSetzen()`
 * stellt eine steuerbare Fassung bereit.
 */

let aktuelleBreite = 390

export function bildschirmbreiteSetzen(breite: number): void {
  aktuelleBreite = breite
}

function passt(abfrage: string): boolean {
  const min = /\(min-width:\s*(\d+)px\)/.exec(abfrage)
  if (min?.[1]) return aktuelleBreite >= Number(min[1])
  const max = /\(max-width:\s*(\d+)px\)/.exec(abfrage)
  if (max?.[1]) return aktuelleBreite <= Number(max[1])
  if (abfrage.includes("prefers-color-scheme: light")) return false
  return false
}

window.matchMedia = ((abfrage: string) => ({
  matches: passt(abfrage),
  media: abfrage,
  onchange: null,
  addEventListener: () => {},
  removeEventListener: () => {},
  addListener: () => {},
  removeListener: () => {},
  dispatchEvent: () => false,
})) as unknown as typeof window.matchMedia
