/*
 * Bibel Lern‑App
 *
 * Dieses Skript lädt die Daten aus einer separaten JSON‑Datei,
 * gruppiert sie nach Themen, baut den Lernkarten‑Stapeln je nach Modus auf
 * und verwaltet das Anzeigen von Karten, Zählern, Hinweisen und Dark‑Mode.
 * Außerdem wird ein Splash‑Screen bereitgestellt, über den die App
 * installiert werden kann, sobald das Browser‑Ereignis
 * `beforeinstallprompt` ausgelöst wird.
 */

(() => {
  // Fallback‑Daten, falls data.json nicht geladen werden kann (z.B. beim file://‑Protokoll).
  const fallbackData = [
    {
      "Thema": "Zukunft",
      "Kommentar": "Die aktuelle Weltlage und die Einstellung der Menschen deuten darauf hin, dass große Veränderungen bevorstehen",
      "Bibel-Verweis": "Mat. 24:3",
      "Bibeltext": "Und als er auf dem Ölberg saß, traten zu ihm seine Jünger allein und fragten: Sage uns, wann wird das geschehen, und was wird das Zeichen deines Kommens und des Endes der Welt?",
      "Schluesselwoerter": ["Veränderungen", "Zeichen"]
    },
    {
      "Thema": "Zukunft",
      "Kommentar": "Die Erde wird nie zerstört werden",
      "Bibel-Verweis": "Ps. 104:5",
      "Bibeltext": "Der du die Erde auf ihre Grundfesten gegründet hast, daß sie für immer und ewig steht.",
      "Schluesselwoerter": ["Erde", "ewig"]
    },
    {
      "Thema": "Zukunft",
      "Kommentar": "Die Umweltzerstörung wird vollständig rückgängig gemacht",
      "Bibel-Verweis": "Jes. 35:1-2",
      "Bibeltext": "Die Wüste und Einöde wird lustig sein, und das dürre Land wird frohlocken; sie wird blühen wie die Lilien.",
      "Schluesselwoerter": ["Wüste", "blühen"]
    },
    {
      "Thema": "Zukunft",
      "Kommentar": "Alle Menschen werden völlig gesund sein",
      "Bibel-Verweis": "Jes. 33:24",
      "Bibeltext": "Kein Einwohner wird sagen: Ich bin krank; dem Volk, das dort wohnt, wird seine Schuld vergeben sein.",
      "Schluesselwoerter": ["gesund", "heil"]
    },
    {
      "Thema": "Zukunft",
      "Kommentar": "Sie können für immer auf der Erde leben",
      "Bibel-Verweis": "Ps. 37:29",
      "Bibeltext": "Die Gerechten erben das Land und bleiben ewiglich darin.",
      "Schluesselwoerter": ["erben", "Land"]
    },
    {
      "Thema": "Familie",
      "Kommentar": "Ein Ehemann sollte seine Frau „lieben wie sich selbst“",
      "Bibel-Verweis": "Eph. 5:33",
      "Bibeltext": "Doch auch ihr, jeder von euch liebe seine Frau wie sich selbst; die Frau aber erweise dem Mann Ehrfurcht.",
      "Schluesselwoerter": ["Liebe", "Respekt"]
    },
    {
      "Thema": "Familie",
      "Kommentar": "Eine Ehefrau sollte ihren Mann von Herzen respektieren",
      "Bibel-Verweis": "Eph. 5:33",
      "Bibeltext": "Doch auch ihr, jeder von euch liebe seine Frau wie sich selbst; die Frau aber erweise dem Mann Ehrfurcht.",
      "Schluesselwoerter": ["Respekt", "Ehemann"]
    },
    {
      "Thema": "Familie",
      "Kommentar": "Mann und Frau sollten einander treu sein",
      "Bibel-Verweis": "Mal. 2:16",
      "Bibeltext": "Denn ich hasse die Scheidung, spricht der HERR … so hütet euch in eurem Geist und seid nicht treulos.",
      "Schluesselwoerter": ["Treue", "Ehe"]
    },
    {
      "Thema": "Familie",
      "Kommentar": "Es wirkt sich auf Kinder gut aus, wenn sie ihre Eltern respektieren und auf sie hören",
      "Bibel-Verweis": "Spr. 1:8-9",
      "Bibeltext": "Höre, mein Sohn, die Unterweisung deines Vaters und verlaß nicht das Gesetz deiner Mutter; denn das wird deinem Haupt ein lieblicher Schmuck sein.",
      "Schluesselwoerter": ["Kinder", "Gehorsam"]
    },
    {
      "Thema": "Gott",
      "Kommentar": "Gott hat einen Namen",
      "Bibel-Verweis": "Ps. 83:18",
      "Bibeltext": "… damit man erkenne: Du allein, dessen Name Jehova ist, der Höchste bist über die ganze Erde.",
      "Schluesselwoerter": ["Name", "Jehova"]
    },
    {
      "Thema": "Gott",
      "Kommentar": "Gott kommuniziert mit uns",
      "Bibel-Verweis": "2. Tim. 3:16-17",
      "Bibeltext": "Alle Schrift ist von Gott eingegeben und nütze zur Lehre, zur Zurechtweisung, zur Besserung … damit der Mensch Gottes vollkommen sei.",
      "Schluesselwoerter": ["Schrift", "göttlich"]
    },
    {
      "Thema": "Gott",
      "Kommentar": "Gott ist fair und hat keine Vorurteile",
      "Bibel-Verweis": "5. Mo. 10:17",
      "Bibeltext": "Denn der HERR, euer Gott, … ist kein Anseher der Person und nimmt keine Bestechung an.",
      "Schluesselwoerter": ["gerecht", "unparteiisch"]
    },
    {
      "Thema": "Gott",
      "Kommentar": "Gott möchte uns helfen",
      "Bibel-Verweis": "Ps. 46:1",
      "Bibeltext": "Gott ist unsre Zuflucht und Stärke, ein bewährter Helfer in Nöten.",
      "Schluesselwoerter": ["Hilfe", "Zuflucht"]
    },
    {
      "Thema": "Gebet",
      "Kommentar": "Gott wünscht sich, dass wir zu ihm beten",
      "Bibel-Verweis": "Ps. 62:8",
      "Bibeltext": "Vertraut auf ihn allezeit, liebe Leute, schüttet euer Herz vor ihm aus; Gott ist unsere Zuflucht.",
      "Schluesselwoerter": ["Beten", "vertrauen"]
    },
    {
      "Thema": "Gebet",
      "Kommentar": "Aus der Bibel erfahren wir, wie man beten sollte",
      "Bibel-Verweis": "Mat. 6:7-13",
      "Bibeltext": "Wenn ihr betet, sollt ihr nicht plappern … Unser Vater im Himmel! Dein Name werde geheiligt …",
      "Schluesselwoerter": ["Gebet", "Vaterunser"]
    },
    {
      "Thema": "Gebet",
      "Kommentar": "Wir sollten oft beten",
      "Bibel-Verweis": "Mat. 7:7-8",
      "Bibeltext": "Bittet, so wird euch gegeben; suchet, so werdet ihr finden; klopfet an, so wird euch aufgetan.",
      "Schluesselwoerter": ["bitten", "suchen"]
    },
    {
      "Thema": "Jesus",
      "Kommentar": "Jesus war ein außergewöhnlicher Lehrer. Sein Rat funktioniert immer",
      "Bibel-Verweis": "Mat. 6:14-15",
      "Bibeltext": "Denn wenn ihr den Menschen ihre Verfehlungen vergebt, wird euch euer himmlischer Vater auch vergeben.",
      "Schluesselwoerter": ["Vergebung", "Lehrer"]
    },
    {
      "Thema": "Jesus",
      "Kommentar": "Jesus hat Ereignisse vorausgesagt, die wir heute beobachten können",
      "Bibel-Verweis": "Mat. 24:3",
      "Bibeltext": "Und als er auf dem Ölberg saß, traten zu ihm seine Jünger allein und fragten: Sage uns, wann wird das geschehen, und was wird das Zeichen deines Kommens und des Endes der Welt?",
      "Schluesselwoerter": ["Prophezeiung", "Endzeit"]
    },
    {
      "Thema": "Jesus",
      "Kommentar": "Jesus ist Gottes Sohn",
      "Bibel-Verweis": "Mat. 16:16",
      "Bibeltext": "Du bist der Christus, der Sohn des lebendigen Gottes.",
      "Schluesselwoerter": ["Christus", "Sohn"]
    },
    {
      "Thema": "Jesus",
      "Kommentar": "Jesus ist nicht der allmächtige Gott",
      "Bibel-Verweis": "Joh. 14:28",
      "Bibeltext": "… denn der Vater ist größer als ich.",
      "Schluesselwoerter": ["Vater", "größer"]
    },
    {
      "Thema": "Reich Gottes",
      "Kommentar": "Das Reich Gottes ist eine echte Regierung im Himmel",
      "Bibel-Verweis": "Dan. 2:44",
      "Bibeltext": "Aber zur Zeit solcher Königreiche wird der Gott des Himmels ein Königreich aufrichten, das nimmermehr zerstört wird; und sein Königreich wird auf kein ander Volk kommen. Es wird alle diese Königreiche zermalmen und verstören; aber es selbst wird ewiglich bleiben.",
      "Schluesselwoerter": ["Königreich", "Himmel"]
    },
    {
      "Thema": "Reich Gottes",
      "Kommentar": "Gottes Reich wird alle Regierungen auf der Erde ersetzen",
      "Bibel-Verweis": "Ps. 2:7-9",
      "Bibeltext": "Du bist mein Sohn; heute habe ich dich gezeugt … Zerbrich sie mit eisernem Zepter und zerschmettere sie.",
      "Schluesselwoerter": ["Regierungen", "ersetzen"]
    },
    {
      "Thema": "Reich Gottes",
      "Kommentar": "Nur Gottes Reich kann die Probleme der Menschheit lösen",
      "Bibel-Verweis": "Ps. 37:10-11",
      "Bibeltext": "Nur noch eine kleine Weile, so ist der Gottlose nicht mehr; … die Sanftmütigen aber werden das Land erben und großen Frieden haben.",
      "Schluesselwoerter": ["Frieden", "Lösung"]
    },
    {
      "Thema": "Leid",
      "Kommentar": "Gott ist nicht schuld, wenn wir leiden",
      "Bibel-Verweis": "5. Mo. 32:4",
      "Bibeltext": "Er ist ein Fels; vollkommen ist sein Tun, denn alle seine Wege sind recht; ein treuer Gott, ohne Falsch.",
      "Schluesselwoerter": ["gerecht", "Schuld"]
    },
    {
      "Thema": "Leid",
      "Kommentar": "Diese Welt wird vom Teufel beherrscht",
      "Bibel-Verweis": "Luk. 4:5-6",
      "Bibeltext": "Da führte ihn der Teufel auf einen hohen Berg … Dir will ich alle Macht und Herrlichkeit dieser Reiche geben, denn sie ist mir übergeben.",
      "Schluesselwoerter": ["Teufel", "Welt"]
    },
    {
      "Thema": "Leid",
      "Kommentar": "Gott sieht es, wenn Sie leiden, und möchte Ihnen helfen",
      "Bibel-Verweis": "Ps. 34:17-19",
      "Bibeltext": "Der HERR ist nahe denen, die zerbrochenen Herzens sind … Er erlöst sie aus allen ihren Nöten.",
      "Schluesselwoerter": ["nah", "helfen"]
    },
    {
      "Thema": "Leid",
      "Kommentar": "Gott wird allem Leid bald ein Ende machen",
      "Bibel-Verweis": "Jes. 65:17",
      "Bibeltext": "Denn siehe, ich schaffe einen neuen Himmel und eine neue Erde …",
      "Schluesselwoerter": ["neuer Himmel", "Ende"]
    },
    {
      "Thema": "Tod",
      "Kommentar": "Die Toten sind ohne jedes Bewusstsein und leiden auch nicht",
      "Bibel-Verweis": "Pred. 9:5",
      "Bibeltext": "Denn die Lebenden wissen, dass sie sterben; die Toten aber wissen nichts …",
      "Schluesselwoerter": ["Toten", "Bewusstsein"]
    },
    {
      "Thema": "Tod",
      "Kommentar": "Die Toten können uns weder helfen noch uns schaden",
      "Bibel-Verweis": "Ps. 146:4",
      "Bibeltext": "Wenn ein Mensch stirbt, kehrt sein Geist zurück zur Erde; an demselben Tag sind alle seine Pläne zunichte.",
      "Schluesselwoerter": ["helfen", "schaden"]
    },
    {
      "Thema": "Tod",
      "Kommentar": "Unsere geliebten Verstorbenen werden auferweckt",
      "Bibel-Verweis": "Hiob 14:13-15",
      "Bibeltext": "Wenn du mich nur im Totenreich verwahrtest … du würdest rufen, und ich würde dir antworten.",
      "Schluesselwoerter": ["Auferweckung", "Hoffnung"]
    },
    {
      "Thema": "Tod",
      "Kommentar": "Den Tod wird es nicht mehr geben",
      "Bibel-Verweis": "Offb. 21:3-4",
      "Bibeltext": "Gott wird abwischen alle Tränen von ihren Augen; der Tod wird nicht mehr sein …",
      "Schluesselwoerter": ["Tod", "nicht mehr"]
    },
    {
      "Thema": "Religion",
      "Kommentar": "Gott ist nicht mit allen Religionen einverstanden",
      "Bibel-Verweis": "Jer. 7:11",
      "Bibeltext": "Ist denn dieses Haus, das nach meinem Namen genannt ist, eine Räuberhöhle geworden in euren Augen?",
      "Schluesselwoerter": ["Religion", "Räuberhöhle"]
    },
    {
      "Thema": "Religion",
      "Kommentar": "Gott hasst Heuchelei",
      "Bibel-Verweis": "Jes. 29:13",
      "Bibeltext": "Dieses Volk naht mir mit seinem Mund … aber ihr Herz ist fern von mir.",
      "Schluesselwoerter": ["Heuchelei", "Herz"]
    },
    {
      "Thema": "Religion",
      "Kommentar": "Die wahre Religion zeichnet sich durch echte Liebe aus",
      "Bibel-Verweis": "Joh. 13:34-35",
      "Bibeltext": "Ein neues Gebot gebe ich euch: dass ihr einander liebt … Daran werden alle erkennen, dass ihr meine Jünger seid.",
      "Schluesselwoerter": ["Liebe", "Gebot"]
    }
  ];
  const modeSelect = document.getElementById('mode-select');
  const topicSelect = document.getElementById('topic-select');
  const bookSelect = document.getElementById('book-select');
  const commentHint = document.getElementById('comment-hint');
  const keywordHint = document.getElementById('keyword-hint');
  const themeHint = document.getElementById('theme-hint');
  const cardEl = document.querySelector('.card');
  const cardFrontSymbol = document.querySelector('.card-symbol');
  const cardFrontRef = document.querySelector('.card-ref');
  const cardFrontComment = document.querySelector('.card-comment');
  const cardBackText = document.querySelector('.card-back .card-text');
  const cardFrontKeywords = document.querySelector('.card-front .card-keywords');
  const cardBackCounter = document.querySelector('.card-back .card-counter');
  const correctBtn = document.getElementById('correct-btn');
  const wrongBtn = document.getElementById('wrong-btn');
  const counterDisplay = document.getElementById('counter');
  const darkToggle = document.getElementById('dark-mode-toggle');
  const splashScreen = document.getElementById('splash-screen');
  const installBtn = document.getElementById('install-btn');
  const continueBtn = document.getElementById('continue-btn');

  // Mapping von Themen zu Symbolen und Farben
  const topicMapping = {
    'Zukunft': { color: '#B2E0F1', symbol: '⏳' },
    'Familie': { color: '#FFEFA1', symbol: '👨‍👩‍👧‍👦' },
    'Gott': { color: '#C3EACE', symbol: '🕊️' },
    'Gebet': { color: '#F9B5C8', symbol: '🙏' },
    'Jesus': { color: '#FFD0B5', symbol: '✝️' },
    'Reich Gottes': { color: '#ADD7F6', symbol: '👑' },
    'Leid': { color: '#D3C0E6', symbol: '😢' },
    'Tod': { color: '#B7D4E7', symbol: '⚰️' },
    'Religion': { color: '#FFC8BF', symbol: '⛪️' },
  };

  // Daten werden nach dem Laden der Seite geladen
  let data = [];
  let topics = {};
  let uniqueBooks = [];
  let deck = [];
  let currentIndex = 0;
  // Zähler für aktuelle Session
  let correctCount = 0;
  // Fortlaufende Statistik über alle Sessions hinweg nach Thema
  let progressData = {};
  // Statistik pro Karte (richtig/falsch)
  let cardStats = {};

  let deferredPrompt = null;

  // Gruppiert Daten nach Thema und sammelt Buchlisten
  function groupData() {
    topics = {};
    const booksSet = new Set();
    data.forEach(item => {
      const theme = item['Thema'];
      if (!topics[theme]) {
        topics[theme] = {
          color: (topicMapping[theme] && topicMapping[theme].color) || '#CCCCCC',
          symbol: (topicMapping[theme] && topicMapping[theme].symbol) || '📖',
          items: [],
        };
      }
      topics[theme].items.push(item);
      // Extrahiere Buch zur Liste
      const book = extractBook(item['Bibel-Verweis']);
      booksSet.add(book);
    });
    uniqueBooks = Array.from(booksSet).sort((a, b) => a.localeCompare(b, 'de')); // sortiert nach deutschem Collation
  }

  // Extrahiert das Buch aus einem Verweis (z.B. "2. Tim. 3:1-5" -> "2. Tim.")
  function extractBook(ref) {
    const beforeColon = ref.split(':')[0].trim();
    const parts = beforeColon.split(' ');
    // Entferne die letzte Komponente (Kapitel)
    if (parts.length > 1) parts.pop();
    return parts.join(' ');
  }

  // Generiert einen eindeutigen Schlüssel für eine Karte. Wir verwenden Thema,
  // den Bibel‑Verweis und den Kommentar, um Karten eindeutig zu identifizieren.
  function getCardKey(item) {
    const theme = item['Thema'] || '';
    const ref = item['Bibel-Verweis'] || '';
    const comment = item['Kommentar'] || '';
    return `${theme}|${ref}|${comment}`;
  }

  // Füllt die Auswahlfelder für Thema und Buch
  function populateSelects() {
    // Themenauswahl
    topicSelect.innerHTML = '';
    Object.keys(topics).forEach(name => {
      const option = document.createElement('option');
      option.value = name;
      option.textContent = name;
      topicSelect.appendChild(option);
    });
    // Buchauswahl
    bookSelect.innerHTML = '';
    uniqueBooks.forEach(name => {
      const option = document.createElement('option');
      option.value = name;
      option.textContent = name;
      bookSelect.appendChild(option);
    });
  }

  // Mischt ein Array (Fisher–Yates)
  function shuffle(array) {
    for (let i = array.length - 1; i > 0; i--) {
      const j = Math.floor(Math.random() * (i + 1));
      [array[i], array[j]] = [array[j], array[i]];
    }
    return array;
  }

  // Bereitet das Karten‑Deck entsprechend dem aktuellen Modus vor
  function prepareDeck() {
    const mode = modeSelect.value;
    let items = [];
    if (mode === 'random') {
      // Alle Elemente
      items = [...data];
    } else if (mode === 'topic') {
      const selectedTheme = topicSelect.value;
      items = topics[selectedTheme] ? [...topics[selectedTheme].items] : [];
    } else if (mode === 'book') {
      const selectedBook = bookSelect.value;
      items = data.filter(item => extractBook(item['Bibel-Verweis']) === selectedBook);
    }
    deck = shuffle(items);
    currentIndex = 0;
    correctCount = 0;
    updateCounter();
  }

  // Aktualisiert die Anzeige der aktuellen Karte
  function updateCard() {
    if (deck.length === 0) {
      cardFrontRef.textContent = 'Keine Karten';
      cardBackText.textContent = '';
      cardFrontSymbol.textContent = '';
      cardEl.classList.remove('flipped');
      return;
    }
    const item = deck[currentIndex];
    const theme = item['Thema'];
    const mapping = topicMapping[theme] || { color: '#CCCCCC', symbol: '📖' };
    // Setze die Akzentfarbe über CSS‑Variable
    cardFrontRef.parentElement.style.setProperty('--accent-color', mapping.color);
    cardBackText.parentElement.style.setProperty('--accent-color', mapping.color);
    // Thema als Text oder leer je nach Hint
    if (themeHint && themeHint.checked) {
      cardFrontSymbol.textContent = theme;
    } else {
      cardFrontSymbol.textContent = '';
    }
    // Referenz immer ohne Keywords anzeigen
    cardFrontRef.textContent = item['Bibel-Verweis'];
    // Kommentar sichtbar machen, wenn aktiviert
    if (commentHint.checked) {
      cardFrontComment.textContent = item['Kommentar'];
    } else {
      cardFrontComment.textContent = '';
    }
    // Setze Text der Rückseite
    cardBackText.textContent = item['Bibeltext'];
    // Aktualisiere die Per‑Karten‑Zähleranzeige
    if (cardBackCounter) {
      const key = getCardKey(item);
      const stats = cardStats[key] || { correct: 0, wrong: 0 };
      const correctVal = stats.correct || 0;
      const wrongVal = stats.wrong || 0;
      cardBackCounter.textContent = `Richtig: ${correctVal} | Falsch: ${wrongVal}`;
    }
    // Schlüsselwörter auf der Vorderseite, falls aktiviert
    if (keywordHint && keywordHint.checked) {
      const keywords = item['Schluesselwoerter'] || [];
      cardFrontKeywords.textContent = keywords.join(', ');
    } else {
      cardFrontKeywords.textContent = '';
    }
    // Stellen Sie sicher, dass die Karte initial nicht umgedreht ist
    cardEl.classList.remove('flipped');
  }

  // Aktualisiert den Counter oben rechts
  function updateCounter() {
    const total = deck.length;
    counterDisplay.textContent = `${correctCount}/${total}`;
  }

  // Wechselt zur nächsten Karte im Stapel
  function nextCard() {
    if (deck.length === 0) return;
    currentIndex = (currentIndex + 1) % deck.length;
    updateCard();
    updateCounter();
  }

  // Ereignis‑Listener für Dark‑Mode
  function handleDarkModeChange() {
    const dark = darkToggle.checked;
    document.body.classList.toggle('dark', dark);
    localStorage.setItem('darkMode', dark);
  }

  // Initialisiert die Splash‑Screen‑Logik
  function initSplash() {
    // Zeige Splash nur, wenn noch nicht gesehen
    const dismissed = localStorage.getItem('splashDismissed');
    if (dismissed) return;
    splashScreen.classList.remove('hidden');
  }

  // Registriert Service Worker
  function registerSW() {
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker
        .register('service-worker.js')
        .catch(err => console.error('Service Worker registration failed:', err));
    }
  }

  // Haupt‑Initialisierung
  document.addEventListener('DOMContentLoaded', async () => {
    // Lade Daten
    try {
      if (location.protocol === 'file:') {
        // Beim direkten Öffnen über das Dateisystem schlägt fetch typischerweise fehl.
        // Verwenden Sie in diesem Fall Fallback‑Daten aus dieser Datei.
        data = fallbackData;
      } else {
        const res = await fetch('data.json');
        if (!res.ok) throw new Error('Network response was not ok');
        data = await res.json();
      }
    } catch (err) {
      console.warn('Fehler beim Laden der Daten, verwende Fallback‑Daten:', err);
      data = fallbackData;
    }
    // Lade gespeicherte Zähler aus localStorage
    try {
      const storedProgress = localStorage.getItem('progressData');
      if (storedProgress) progressData = JSON.parse(storedProgress);
    } catch (e) {
      progressData = {};
    }
    try {
      const storedStats = localStorage.getItem('cardStats');
      if (storedStats) cardStats = JSON.parse(storedStats);
    } catch (e) {
      cardStats = {};
    }
    // Gruppiere Daten und fülle Auswahlfelder
    groupData();
    populateSelects();
    // Auswahllisten je nach Modus initial ausblenden
    topicSelect.classList.toggle('hidden', modeSelect.value !== 'topic');
    bookSelect.classList.toggle('hidden', modeSelect.value !== 'book');
    prepareDeck();
    updateCard();
    // Dark mode initial
    const darkPref = localStorage.getItem('darkMode') === 'true';
    darkToggle.checked = darkPref;
    document.body.classList.toggle('dark', darkPref);
    // Splash init
    initSplash();
    // Service Worker
    registerSW();
  });

  // Event‑Listener für Mode‑Änderungen
  modeSelect.addEventListener('change', () => {
    const mode = modeSelect.value;
    topicSelect.classList.toggle('hidden', mode !== 'topic');
    bookSelect.classList.toggle('hidden', mode !== 'book');
    prepareDeck();
    updateCard();
  });

  topicSelect.addEventListener('change', () => {
    prepareDeck();
    updateCard();
  });
  bookSelect.addEventListener('change', () => {
    prepareDeck();
    updateCard();
  });

  // Hint toggles
  commentHint.addEventListener('change', () => {
    updateCard();
  });
  keywordHint.addEventListener('change', () => {
    updateCard();
  });

  if (themeHint) {
    themeHint.addEventListener('change', () => {
      updateCard();
    });
  }

  // Card click – flip
  cardEl.addEventListener('click', () => {
    if (deck.length === 0) return;
    cardEl.classList.toggle('flipped');
  });

  // Korrekt/Wrong Buttons
  correctBtn.addEventListener('click', () => {
    if (deck.length === 0) return;
    // Aktuelle Karte
    const item = deck[currentIndex];
    const theme = item['Thema'];
    const key = getCardKey(item);
    // Session‑Counter erhöhen
    correctCount++;
    // Fortschrittsdaten pro Thema aktualisieren
    if (!progressData[theme]) progressData[theme] = { correct: 0, wrong: 0 };
    progressData[theme].correct++;
    // Per‑Karten‑Statistik aktualisieren
    if (!cardStats[key]) cardStats[key] = { correct: 0, wrong: 0 };
    cardStats[key].correct++;
    // Speichern in localStorage
    try {
      localStorage.setItem('progressData', JSON.stringify(progressData));
      localStorage.setItem('cardStats', JSON.stringify(cardStats));
    } catch (e) {
      console.warn('Speichern der Zählerdaten fehlgeschlagen:', e);
    }
    nextCard();
  });
  wrongBtn.addEventListener('click', () => {
    if (deck.length === 0) return;
    // Aktuelle Karte
    const item = deck[currentIndex];
    const theme = item['Thema'];
    const key = getCardKey(item);
    // Fortschrittsdaten pro Thema aktualisieren
    if (!progressData[theme]) progressData[theme] = { correct: 0, wrong: 0 };
    progressData[theme].wrong++;
    // Per‑Karten‑Statistik aktualisieren
    if (!cardStats[key]) cardStats[key] = { correct: 0, wrong: 0 };
    cardStats[key].wrong++;
    // Speichern in localStorage
    try {
      localStorage.setItem('progressData', JSON.stringify(progressData));
      localStorage.setItem('cardStats', JSON.stringify(cardStats));
    } catch (e) {
      console.warn('Speichern der Zählerdaten fehlgeschlagen:', e);
    }
    nextCard();
  });

  // Dark mode toggle
  darkToggle.addEventListener('change', handleDarkModeChange);

  // Splash‑Screen Buttons
  continueBtn.addEventListener('click', () => {
    splashScreen.classList.add('hidden');
    localStorage.setItem('splashDismissed', 'true');
  });
  installBtn.addEventListener('click', async () => {
    if (deferredPrompt) {
      deferredPrompt.prompt();
      const result = await deferredPrompt.userChoice;
      console.log('Install result:', result);
      deferredPrompt = null;
    }
    splashScreen.classList.add('hidden');
    localStorage.setItem('splashDismissed', 'true');
  });

  // beforeinstallprompt event
  window.addEventListener('beforeinstallprompt', e => {
    // Verhindere die Standard‑Banneranzeige
    e.preventDefault();
    deferredPrompt = e;
    // Falls der Splash noch sichtbar ist, zeige Install‑Button
    installBtn.style.display = 'inline-block';
  });
})();