import json
from pathlib import Path


def row(q, a, alts=None):
    if alts is None:
        alts = []
    return {"q": q, "a": a, "alts": alts}


def build_categories():
    cats = {}

    caps = [
        ("Deutschland", "Berlin"),
        ("Frankreich", "Paris"),
        ("Italien", "Rom"),
        ("Spanien", "Madrid"),
        ("Portugal", "Lissabon"),
        ("Vereinigtes Koenigreich", "London"),
        ("Irland", "Dublin"),
        ("Oesterreich", "Wien"),
        ("Schweiz", "Bern"),
        ("Niederlande", "Amsterdam"),
        ("Belgien", "Bruessel"),
        ("Polen", "Warschau"),
        ("Tschechien", "Prag"),
        ("Daenemark", "Kopenhagen"),
        ("Schweden", "Stockholm"),
        ("Norwegen", "Oslo"),
        ("Finnland", "Helsinki"),
        ("Island", "Reykjavik"),
        ("Griechenland", "Athen"),
        ("Tuerkei", "Ankara"),
        ("USA", "Washington, D.C."),
        ("Kanada", "Ottawa"),
        ("Mexiko", "Mexiko-Stadt"),
        ("Brasilien", "Brasilia"),
        ("Argentinien", "Buenos Aires"),
        ("Japan", "Tokio"),
        ("China", "Peking"),
        ("Indien", "Neu-Delhi"),
        ("Australien", "Canberra"),
        ("Neuseeland", "Wellington"),
    ]
    cats["Stadt"] = [
        row(f"Was ist die Hauptstadt von {country}?", capital, [capital.lower()])
        for country, capital in caps
    ]

    plates = [
        ("B", "Berlin"),
        ("M", "Muenchen"),
        ("HH", "Hamburg"),
        ("K", "Koeln"),
        ("F", "Frankfurt am Main"),
        ("S", "Stuttgart"),
        ("L", "Leipzig"),
        ("DD", "Dresden"),
        ("HB", "Bremen"),
        ("H", "Hannover"),
        ("DO", "Dortmund"),
        ("DU", "Duisburg"),
        ("E", "Essen"),
        ("N", "Nuernberg"),
        ("W", "Wuppertal"),
        ("BO", "Bochum"),
        ("BI", "Bielefeld"),
        ("BN", "Bonn"),
        ("MS", "Muenster"),
        ("KA", "Karlsruhe"),
        ("MA", "Mannheim"),
        ("FR", "Freiburg im Breisgau"),
        ("TR", "Trier"),
        ("TUE", "Tuebingen"),
        ("RT", "Reutlingen"),
        ("ES", "Esslingen"),
        ("UL", "Ulm"),
        ("HD", "Heidelberg"),
        ("HN", "Heilbronn"),
        ("OF", "Offenbach am Main"),
    ]
    cats["Landkreis"] = [
        row(f"Wofuer steht das Kfz-Kennzeichen {code}?", city, [city.lower()])
        for code, city in plates
    ]

    cats["Allgemein"] = [
        row("Wie heisst die Hauptstadt von Deutschland?", "Berlin", ["berlin"]),
        row("Welcher Planet ist der Sonne am naechsten?", "Merkur", ["merkur"]),
        row("Welches chemische Symbol hat Wasser?", "H2O", ["h2o"]),
        row("Wie viele Kontinente gibt es in der klassischen Zaehlung?", "7", ["sieben"]),
        row("Welcher Planet wird auch der rote Planet genannt?", "Mars", ["mars"]),
        row("Welches ist das groesste Landtier der Erde?", "Afrikanischer Elefant", ["elefant"]),
        row("Wie viele Minuten hat eine Stunde?", "60", ["sechzig"]),
        row("Wie heisst der Autor von Faust?", "Johann Wolfgang von Goethe", ["goethe"]),
        row("Was ist die kleinste Primzahl?", "2", ["zwei"]),
        row("Welche Einheit misst elektrische Stromstaerke?", "Ampere", ["ampere"]),
        row("Welches Element hat das Symbol O?", "Sauerstoff", ["sauerstoff"]),
        row("Welches Organ ist das groesste Organ des Menschen?", "Haut", ["haut"]),
        row("Wer malte die Mona Lisa?", "Leonardo da Vinci", ["da vinci"]),
        row("Wer war der erste Mensch auf dem Mond?", "Neil Armstrong", ["armstrong"]),
        row("Welches ist das groesste lebende Tier der Erde?", "Blauwal", ["blauwal"]),
        row("Welches Gas nehmen Pflanzen fuer die Fotosynthese auf?", "Kohlendioxid", ["co2"]),
        row("Wie heisst die Waehrung in Japan?", "Yen", ["yen"]),
        row("Wie viele Seiten hat ein Quadrat?", "4", ["vier"]),
        row("Aus welchen zwei Ziffern besteht das Binaersystem?", "0 und 1", ["0,1"]),
        row("Wie heisst der hoechste Berg der Erde ueber Meeresspiegel?", "Mount Everest", ["everest"]),
        row("Welcher Planet ist der groesste in unserem Sonnensystem?", "Jupiter", ["jupiter"]),
        row("Welches Metall ist bei Raumtemperatur fluessig?", "Quecksilber", ["quecksilber"]),
        row("Bei wie viel Grad Celsius gefriert Wasser?", "0", ["0 grad"]),
        row("Bei wie viel Grad Celsius siedet Wasser auf Meereshöhe?", "100", ["100 grad"]),
        row("Welches Meer trennt Europa und Afrika im Westen?", "Mittelmeer", ["mittelmeer"]),
        row("Wie heisst die Wissenschaft vom Wetter?", "Meteorologie", ["meteorologie"]),
        row("Welche Farbe erhaelt man aus Blau und Gelb?", "Gruen", ["gruen"]),
        row("Wie viele Tage hat ein Schaltjahr?", "366", ["366"]),
        row("Wie heisst die groesste Insel der Welt?", "Groenland", ["groenland"]),
        row("Welcher Ozean ist der groesste der Erde?", "Pazifischer Ozean", ["pazifik"]),
    ]

    cats["Weihnachten"] = [
        row("Auf welches Datum faellt Heiligabend?", "24. Dezember", ["24.12"]),
        row("Auf welches Datum faellt der erste Weihnachtsfeiertag?", "25. Dezember", ["25.12"]),
        row("Auf welches Datum faellt der zweite Weihnachtsfeiertag?", "26. Dezember", ["26.12"]),
        row("Wie viele Kerzen hat ein klassischer Adventskranz?", "4", ["vier"]),
        row("An welchem Tag kommt traditionell der Nikolaus?", "6. Dezember", ["06.12"]),
        row("Wie nennt man die Zeit vor Weihnachten mit vier Sonntagen?", "Advent", ["advent"]),
        row("Welche Pflanze ist als Weihnachtsstern bekannt?", "Poinsettie", ["weihnachtsstern"]),
        row("Wie heisst das bekannte Weihnachtslied mit den Worten Stille Nacht?", "Stille Nacht, heilige Nacht", ["stille nacht"]),
        row("In welcher Stadt ist der Christkindlesmarkt besonders bekannt?", "Nuernberg", ["nuernberg"]),
        row("Welches Gebaeck ist in Deutschland ein klassischer Weihnachtsklassiker?", "Lebkuchen", ["lebkuchen"]),
        row("Wie nennt man die Darstellung der Geburt Jesu?", "Krippe", ["krippe"]),
        row("Wie heisst der Ort der Geburt Jesu im Neuen Testament?", "Bethlehem", ["bethlehem"]),
        row("Welches Getraenk wird auf Weihnachtsmaerkten warm serviert?", "Gluehwein", ["gluehwein"]),
        row("Wie viele Tueren hat ein klassischer Adventskalender?", "24", ["24"]),
        row("Welcher Baum wird in Deutschland haeufig als Weihnachtsbaum genutzt?", "Tanne", ["tanne"]),
        row("Wie nennt man das Beschenken am Heiligabend?", "Bescherung", ["bescherung"]),
        row("Welche Farben werden mit Weihnachten haeufig kombiniert?", "Rot und Gruen", ["rot gruen"]),
        row("Welche Suessigkeit ist als Stollen besonders bekannt?", "Christstollen", ["christstollen"]),
        row("Wie heisst der Stern, der laut Bibel zu Jesus fuehrte?", "Stern von Bethlehem", ["bethlehemstern"]),
        row("Welcher Feiertag folgt direkt auf Heiligabend?", "Erster Weihnachtsfeiertag", ["1. weihnachtsfeiertag"]),
        row("Wie heisst das Lied O Tannenbaum auf Deutsch?", "O Tannenbaum", ["o tannenbaum"]),
        row("Welche Frucht wird in der Weihnachtszeit oft mit Nelken dekoriert?", "Orange", ["orange"]),
        row("Wie nennt man den 24. Dezember im deutschsprachigen Raum?", "Heiligabend", ["heiligabend"]),
        row("Welche Figur steht im Zentrum der christlichen Weihnachtsbotschaft?", "Jesus Christus", ["jesus"]),
        row("Wie heisst das Fest am 6. Januar im kirchlichen Kalender?", "Epiphanias", ["heilige drei koenige"]),
        row("Was bedeutet Advent woertlich?", "Ankunft", ["ankunft"]),
        row("Welche Nuss wird in der Weihnachtsbaeckerei oft verwendet?", "Haselnuss", ["haselnuss"]),
        row("Wie nennt man den 26. Dezember in Deutschland?", "Zweiter Weihnachtsfeiertag", ["2. weihnachtsfeiertag"]),
        row("Welche Figur bringt in manchen Regionen die Geschenke statt des Weihnachtsmanns?", "Christkind", ["christkind"]),
        row("Welche Stadt ist fuer den Dresdner Christstollen bekannt?", "Dresden", ["dresden"]),
    ]

    cats["XMAS"] = [
        row("Wofuer steht die Abkuerzung Xmas?", "Christmas", ["christmas"]),
        row("Welche englische Grussformel ist an Weihnachten am haeufigsten?", "Merry Christmas", ["merry christmas"]),
        row("Wo lebt Santa Claus der Legende nach?", "Nordpol", ["north pole"]),
        row("Welche Farbe hat Rudolphs Nase?", "Rot", ["red"]),
        row("Wie viele Rentiere zieht Santa in der Popkultur meist mit Rudolph?", "9", ["9"]),
        row("An welchem Datum wird Christmas in vielen Laendern gefeiert?", "25. Dezember", ["25 december"]),
        row("Wie heisst der Feiertag am 26. Dezember in Grossbritannien?", "Boxing Day", ["boxing day"]),
        row("Welche zwei Farben hat eine klassische Candy Cane?", "Rot und Weiss", ["red and white"]),
        row("Welcher Baumtyp wird als Christmas Tree dekoriert?", "Immergruener Baum", ["evergreen"]),
        row("Welche Pflanze haengt man traditionell fuer einen Kuss auf?", "Mistel", ["mistletoe"]),
        row("Wo werden Christmas Stockings oft aufgehaengt?", "Am Kamin", ["fireplace"]),
        row("Wie heisst der bekannte Song Jingle Bells auf Englisch?", "Jingle Bells", ["jingle bells"]),
        row("Wie heisst der Weihnachtsstern auf Englisch?", "Poinsettia", ["poinsettia"]),
        row("Wofuer steht der Kreis eines Christmas Wreath symbolisch?", "Ewigkeit", ["eternity"]),
        row("Wie nennt man die Darstellung der Geburt Jesu auf Englisch?", "Nativity Scene", ["nativity scene"]),
        row("Mit welchem Monat beginnt ein klassischer Advent Calendar?", "Dezember", ["december"]),
        row("Wie heisst das Fest am 6. Januar in vielen christlichen Traditionen?", "Epiphany", ["epiphany"]),
        row("In welcher Sprache wurde Silent Night urspruenglich geschrieben?", "Deutsch", ["german"]),
        row("Wie heisst Santa Claus in niederlaendischer Tradition?", "Sinterklaas", ["sinterklaas"]),
        row("Welches Getraenk wird in den USA zu Christmas oft getrunken?", "Eggnog", ["eggnog"]),
        row("Wie nennt man den Holzblock-Brauch zu Weihnachten in Teilen Europas?", "Yule Log", ["yule log"]),
        row("Welches Symbol sitzt oft auf der Spitze des Christmas Trees?", "Stern", ["star"]),
        row("Wer bringt in Spanien traditionell am 6. Januar Geschenke?", "Die Heiligen Drei Koenige", ["three kings"]),
        row("Welche Figur bringt in Italien nach Tradition am 6. Januar Geschenke?", "Befana", ["befana"]),
        row("Welche Farben gelten als klassische Christmas Colors?", "Rot und Gruen", ["red and green"]),
        row("Welcher griechische Buchstabe steckt hinter dem X in Xmas?", "Chi", ["chi"]),
        row("Wie heisst der 24. Dezember auf Englisch?", "Christmas Eve", ["christmas eve"]),
        row("Wie heisst der 25. Dezember auf Englisch?", "Christmas Day", ["christmas day"]),
        row("Welche Figur in rotem Mantel verteilt in der Popkultur Geschenke?", "Santa Claus", ["santa"]),
        row("Wie lautet die haeufige Abkuerzung fuer Frohe Weihnachten auf Englisch?", "Merry Xmas", ["merry xmas"]),
    ]

    cats["Winter"] = [
        row("Wann beginnt der meteorologische Winter auf der Nordhalbkugel?", "1. Dezember", ["01.12"]),
        row("In welchen Monaten liegt der meteorologische Winter auf der Nordhalbkugel?", "Dezember, Januar und Februar", ["dezember januar februar"]),
        row("Bei welcher Temperatur gefriert reines Wasser?", "0 Grad Celsius", ["0"]),
        row("Wie nennt man duennes, kaum sichtbares Eis auf Strassen?", "Glatteis", ["glatteis"]),
        row("Was senkt auf Strassen den Gefrierpunkt von Wasser?", "Streusalz", ["streusalz"]),
        row("Wie heisst der kuerzeste Tag des Jahres auf der Nordhalbkugel?", "Wintersonnenwende", ["wintersonnenwende"]),
        row("Wie nennt man eine lawinenartige Schneemassenbewegung?", "Lawine", ["lawine"]),
        row("Wie heisst die koerperliche Unterkuehlung unter 35 Grad Kerntemperatur?", "Hypothermie", ["hypothermie"]),
        row("Welches Reifensymbol kennzeichnet zugelassene Winterreifen in Europa?", "Alpine-Symbol", ["3pmsf"]),
        row("Wie nennt man die durch Wind verstaerkte Kaelteempfindung?", "Windchill", ["windchill"]),
        row("Wie heisst dauerhaft gefrorener Boden?", "Permafrost", ["permafrost"]),
        row("Welche Symmetrie haben typische Schneekristalle?", "Sechsstrahlig", ["6-fach"]),
        row("Wodurch entsteht sichtbarer Atem in kalter Luft?", "Kondensation", ["kondensation"]),
        row("Wie nennt man den Bereich mit 24 Stunden Dunkelheit im Winter?", "Polarnacht", ["polarnacht"]),
        row("Welches Frostschutzmittel wird in Kuehlsystemen oft genutzt?", "Glykol", ["glykol"]),
        row("Wie heisst das Ueberwintern mancher Tiere mit stark reduziertem Stoffwechsel?", "Winterschlaf", ["winterschlaf"]),
        row("Welche Jahreszeit ist auf der Suedhalbkugel, wenn auf der Nordhalbkugel Winter ist?", "Sommer", ["sommer"]),
        row("Wie nennt man starken Schneesturm mit Windverwehungen?", "Blizzard", ["blizzard"]),
        row("Woraus bestehen Eiszapfen?", "Gefrorenes Wasser", ["eis"]),
        row("Wie nennt man die astronomische Linie bei etwa 66,5 Grad Nord?", "Arktischer Polarkreis", ["polarkreis"]),
        row("Warum gefriert ein See meist von oben nach unten?", "Weil Eis leichter als Wasser ist", ["eis ist leichter"]),
        row("Welche Schicht unter dem Eis bleibt in Seen oft am waermsten?", "Wasser bei etwa 4 Grad Celsius", ["4 grad"]),
        row("Wie nennt man Schnee, der durch Druck zu Eis wird?", "Firn", ["firn"]),
        row("Welche Strahlungsart fehlt im Winter oft und reduziert Vitamin-D-Bildung?", "UVB", ["uvb"]),
        row("Wie heisst das periodische Entstehen und Schmelzen von Eis im Boden?", "Frost-Tau-Wechsel", ["frost tau wechsel"]),
        row("Was ist der technische Zweck von Schneeketten?", "Verbesserung der Traktion", ["traktion"]),
        row("Wie nennt man gefrierenden Nebel auf Oberflaechen?", "Raureif", ["raureif"]),
        row("Welche Farbe reflektiert Sonnenlicht auf Schnee am staerksten?", "Weiss", ["weiss"]),
        row("Wie heisst die Wetterlage mit laenger anhaltendem Hochdruck und Frost?", "Inversionswetterlage", ["inversion"]),
        row("Welches Naturphaenomen sieht man oft in Polarregionen als Leuchterscheinung?", "Polarlicht", ["polarlicht"]),
    ]

    cats["Silvester"] = [
        row("Wie nennt man in Deutschland den 31. Dezember?", "Silvester", ["silvester"]),
        row("Zu welcher Uhrzeit startet an Silvester der neue Kalendertag?", "00:00 Uhr", ["mitternacht"]),
        row("Welche Aktivitaet ist um Mitternacht an Silvester besonders verbreitet?", "Feuerwerk", ["feuerwerk"]),
        row("Wie heisst der TV-Klassiker, der in Deutschland an Silvester oft laeuft?", "Dinner for One", ["dinner for one"]),
        row("Welches Getraenk wird in Deutschland zu Silvester oft zum Anstossen genutzt?", "Sekt", ["sekt"]),
        row("Welches Ritual ersetzte in Deutschland weitgehend das Bleigiessen?", "Wachsgiessen", ["wachsgiessen"]),
        row("Wie heisst die traditionelle Kurzformel zum Anstossen auf das neue Jahr?", "Prosit Neujahr", ["prosit neujahr"]),
        row("Welcher Gluecksbringer ist an Silvester in Deutschland besonders bekannt?", "Gluecksschwein", ["gluecksschwein"]),
        row("Welches Kleeblatt gilt als Glueckssymbol an Silvester?", "Vierblaettriges Kleeblatt", ["kleeblatt"]),
        row("Welches Insekt gilt in Deutschland als Glueckssymbol zum Jahreswechsel?", "Marienkaefer", ["marienkaefer"]),
        row("In welcher Hauptstadt findet eine der groessten Silvesterpartys Deutschlands statt?", "Berlin", ["berlin"]),
        row("Welcher Platz in Berlin ist an Silvester fuer Grossveranstaltungen bekannt?", "Brandenburger Tor", ["brandenburger tor"]),
        row("Welcher Begriff bezeichnet den letzten Abend des Jahres?", "Silvesterabend", ["silvesterabend"]),
        row("Wie nennt man den Moment kurz vor Mitternacht mit rueckwaerts laufender Zahl?", "Countdown", ["countdown"]),
        row("Wie viele Sekunden hat der letzte Countdown von 10 bis 0?", "10", ["10"]),
        row("Welche Schutzmassnahme ist beim Zuenden von Feuerwerk wichtig?", "Sicherheitsabstand", ["abstand"]),
        row("Welche Richtung sollte man beim Zuenden einer Rakete beachten?", "Vom Koerper weg", ["weg vom koerper"]),
        row("Wie heisst der 31. Dezember im internationalen Gebrauch auf Englisch?", "New Years Eve", ["new years eve"]),
        row("Welches Wort beschreibt den Wechsel in ein neues Jahr?", "Jahreswechsel", ["jahreswechsel"]),
        row("Wie nennt man das gemeinsame Trinken um Mitternacht?", "Anstossen", ["prosten"]),
        row("Welches Symbol aus Schornstein und Leiter gilt als Gluecksbringer?", "Schornsteinfeger", ["schornsteinfeger"]),
        row("Welches Tier gilt in Deutschland an Silvester als klassisches Glueckssymbol?", "Schwein", ["schwein"]),
        row("Was markiert in digitaler Zeitanzeige den Start des neuen Jahres?", "00:00", ["0:00"]),
        row("Wie heisst der letzte Monat des Jahres?", "Dezember", ["dezember"]),
        row("Wie lautet die Monatszahl von Dezember?", "12", ["12"]),
        row("Welche Farbe haben viele traditionelle Glueckspilz-Dekoartikel?", "Rot", ["rot"]),
        row("Welche Frucht wird in Spanien zum Jahreswechsel traditionell in 12 Stuecken gegessen?", "Trauben", ["weintrauben"]),
        row("Wie viele Glockenschlaege sind in Spanien beim Jahreswechsel traditionell entscheidend?", "12", ["12"]),
        row("Wie nennt man den Zeitraum kurz nach Mitternacht am 1. Januar?", "Neujahrsnacht", ["neujahrsnacht"]),
        row("Welcher Begriff steht fuer ein lautes Begruessungsfeuerwerk zum Jahreswechsel?", "Mitternachtsfeuerwerk", ["feuerwerk"]),
    ]

    cats["Neujahr"] = [
        row("Auf welches Datum faellt Neujahr?", "1. Januar", ["01.01"]),
        row("Wie heisst der erste Tag des Kalenderjahres?", "Neujahr", ["neujahr"]),
        row("Welcher Monat beginnt an Neujahr?", "Januar", ["januar"]),
        row("Ist der 1. Januar in Deutschland ein gesetzlicher Feiertag?", "Ja", ["ja"]),
        row("Wie nennt man persoenliche Ziele zum Jahresbeginn?", "Neujahrsvorsaetze", ["vorsaetze"]),
        row("In welcher Stadt findet das bekannte Neujahrskonzert der Wiener Philharmoniker statt?", "Wien", ["wien"]),
        row("Welcher Kalender gilt international als Standard fuer den 1. Januar als Jahresbeginn?", "Gregorianischer Kalender", ["gregorianischer kalender"]),
        row("Wie viele Monate hat ein normales Kalenderjahr?", "12", ["12"]),
        row("Wie viele Tage hat der Januar?", "31", ["31"]),
        row("Wie nennt man die Nacht vom 31. Dezember auf den 1. Januar?", "Silvesternacht", ["silvesternacht"]),
        row("Welcher Begriff bezeichnet den Start in ein neues Jahr?", "Jahresbeginn", ["jahresbeginn"]),
        row("Welche Zahl aendert sich beim Jahreswechsel in Datumsangaben?", "Jahreszahl", ["jahreszahl"]),
        row("Welches Datum folgt direkt auf den 31. Dezember?", "1. Januar", ["1 januar"]),
        row("Wie nennt man in der Finanzwelt den Abschluss des alten Jahres?", "Jahresabschluss", ["jahresabschluss"]),
        row("Wie heisst die erste Kalenderwoche des Jahres?", "Kalenderwoche 1", ["kw1"]),
        row("Wie viele Quartale hat ein Jahr?", "4", ["4"]),
        row("Welches Quartal beginnt am 1. Januar?", "Erstes Quartal", ["q1"]),
        row("Welcher Begriff beschreibt das bewusste Zurueckblicken auf das alte Jahr?", "Jahresrueckblick", ["jahresrueckblick"]),
        row("Wie heisst die Planung fuer das neue Jahr in Unternehmen oft?", "Jahresplanung", ["jahresplanung"]),
        row("Welches Land begruesst wegen seiner Zeitzone sehr frueh das neue Jahr?", "Kiribati", ["kiribati"]),
        row("Welches Land begruesst wegen seiner Zeitzone sehr spaet das neue Jahr?", "Amerikanisch-Samoa", ["amerikanisch-samoa"]),
        row("Wie nennt man das gemeinsame Zaehlen kurz vor Mitternacht?", "Countdown", ["countdown"]),
        row("Welcher Feiertag folgt in Deutschland auf Neujahr als naechster bundeseinheitlicher Feiertag?", "Karfreitag", ["karfreitag"]),
        row("Wie heisst der Feiertag am 6. Januar in Teilen Deutschlands?", "Heilige Drei Koenige", ["epiphanias"]),
        row("Welche Uhrzeit markiert den Beginn eines neuen Tages?", "00:00 Uhr", ["00:00"]),
        row("Wie nennt man eine feierliche Rede zum Jahresbeginn?", "Neujahrsansprache", ["neujahrsansprache"]),
        row("Welches Wort steht fuer gutes Gelingen im neuen Jahr?", "Glueck", ["glueck"]),
        row("Wie heisst die Zeit direkt nach Neujahr umgangssprachlich oft?", "Neujahrstage", ["neujahrstage"]),
        row("Welcher Monatsname folgt direkt auf Januar?", "Februar", ["februar"]),
        row("Wie nennt man den ersten Arbeitstag nach Feiertagen zum Jahresbeginn oft?", "Jahresauftakt", ["auftakt"]),
    ]

    cats["Jahreswechsel"] = [
        row("Wie nennt man den Uebergang vom alten ins neue Jahr?", "Jahreswechsel", ["jahreswechsel"]),
        row("Von welchem Datum auf welches Datum erfolgt der Jahreswechsel?", "Vom 31. Dezember auf den 1. Januar", ["31.12 auf 1.1"]),
        row("Welche Uhrzeit markiert den exakten Jahreswechsel?", "00:00 Uhr", ["mitternacht"]),
        row("Welche Zahl aendert sich beim Jahreswechsel im Datum?", "Jahreszahl", ["jahreszahl"]),
        row("Wie nennt man die letzten Tage des Jahres oft zusammenfassend?", "Jahresende", ["jahresende"]),
        row("Wie nennt man die ersten Tage nach dem Jahreswechsel?", "Jahresanfang", ["jahresanfang"]),
        row("Welcher Begriff beschreibt das Abschliessen von Aufgaben zum Jahresende?", "Jahresabschluss", ["jahresabschluss"]),
        row("Wie nennt man die Planung fuer das neue Jahr?", "Jahresplanung", ["jahresplanung"]),
        row("Wie heisst die Rueckschau auf wichtige Ereignisse des Jahres?", "Jahresrueckblick", ["jahresrueckblick"]),
        row("Wie viele Tage hat ein normales Jahr?", "365", ["365"]),
        row("Wie viele Tage hat ein Schaltjahr?", "366", ["366"]),
        row("Welcher Monat endet das Kalenderjahr?", "Dezember", ["dezember"]),
        row("Welcher Monat beginnt das Kalenderjahr?", "Januar", ["januar"]),
        row("Wie nennt man den Start in das erste Quartal?", "Q1-Start", ["q1"]),
        row("Wie nennt man eine Bilanz zum Ende eines Geschaeftsjahres?", "Jahresbilanz", ["jahresbilanz"]),
        row("Wie nennt man den Wechsel des Steuerjahres?", "Steuerjahreswechsel", ["steuerjahreswechsel"]),
        row("Wie heisst das Symbol fuer den Beginn von Neuem nach einem Ende?", "Neustart", ["neustart"]),
        row("Wie nennt man den Vorsatz, Gewohnheiten zum Jahreswechsel zu aendern?", "Neujahrsvorsatz", ["neujahrsvorsatz"]),
        row("Wie nennt man den Uebergang in neue Fristen zum Jahresbeginn?", "Fristenwechsel", ["fristenwechsel"]),
        row("Welche Zeitangabe ist fuer den Jahreswechsel weltweit je Zeitzone unterschiedlich?", "Mitternacht", ["mitternacht"]),
        row("Wie heisst das weltweit verbreitete Ritual des Rueckwaertszaehlens?", "Countdown", ["countdown"]),
        row("Wie nennt man den Start neuer Budgets zum Jahresbeginn?", "Budgetfreigabe", ["budgetfreigabe"]),
        row("Wie heisst die erste Arbeitswoche nach dem Jahreswechsel in Unternehmen oft?", "Auftaktwoche", ["auftaktwoche"]),
        row("Wie nennt man den Abschluss von Zielvereinbarungen zum Jahresende?", "Zielreview", ["zielreview"]),
        row("Welche Kalendereinheit startet direkt mit dem Jahreswechsel neu?", "Kalenderwoche", ["kw"]),
        row("Wie heisst die internationale Datumsnorm fuer maschinenlesbare Formate haeufig?", "ISO 8601", ["iso8601"]),
        row("Welche Abkuerzung wird fuer Kalenderwoche im Deutschen genutzt?", "KW", ["kw"]),
        row("Wie nennt man den wirtschaftlichen Neustart nach abgeschlossenem Geschaeftsjahr?", "Neues Geschaeftsjahr", ["geschaeftsjahr"]),
        row("Welcher Begriff beschreibt den Wechsel in neue Jahresziele?", "Zielneustart", ["zielneustart"]),
        row("Wie nennt man den formalen Beginn neuer Vertragsperioden zum Jahresanfang?", "Periodenbeginn", ["periodenbeginn"]),
    ]

    cats["Lokal"] = [
        row("Wie viele Stellen hat eine deutsche Postleitzahl?", "5", ["5"]),
        row("Wie nennt man die Nummer eines Gebaeudes in einer Strasse?", "Hausnummer", ["hausnummer"]),
        row("Welches Dokument bestaetigt in Deutschland den Wohnsitz?", "Meldebescheinigung", ["meldebescheinigung"]),
        row("Welche Behoerde ist in Deutschland fuer Personalausweise zustaendig?", "Buergeramt", ["buergeramt"]),
        row("Wie nennt man den kleinsten selbstverwalteten Ort in Deutschland?", "Gemeinde", ["gemeinde"]),
        row("Wie nennt man den Zusammenschluss mehrerer Gemeinden in einem Kreis?", "Landkreis", ["landkreis"]),
        row("Welches Register enthaelt Wohnsitzdaten in Kommunen?", "Melderegister", ["melderegister"]),
        row("Wie nennt man die zentrale Verwaltung einer Stadt?", "Rathaus", ["rathaus"]),
        row("Wie heisst die gewaehlte Spitze einer Stadtverwaltung?", "Buergermeister", ["buergermeister"]),
        row("Welche Nummer waehlt man europaweit fuer den Notruf?", "112", ["112"]),
        row("Welche Nummer waehlt man in Deutschland fuer die Polizei?", "110", ["110"]),
        row("Wie nennt man den Bereich einer Stadt mit zentraler Funktion?", "Innenstadt", ["innenstadt"]),
        row("Wie nennt man einen Teilbereich einer Stadt mit eigenem Namen?", "Stadtteil", ["stadtteil"]),
        row("Wie nennt man den offiziellen Ort fuer die Anmeldung eines Wohnsitzes?", "Einwohnermeldeamt", ["einwohnermeldeamt"]),
        row("Welches Dokument braucht man fuer die Fahrzeugzulassung?", "Zulassungsbescheinigung", ["zulassungsbescheinigung"]),
        row("Wie heisst die Behoerde fuer Kfz-Angelegenheiten?", "Zulassungsstelle", ["zulassungsstelle"]),
        row("Wie nennt man den geografischen Mittelpunkt eines Ortes oft?", "Ortskern", ["ortskern"]),
        row("Wie nennt man eine von Baeumen begleitete breite Strasse?", "Allee", ["allee"]),
        row("Wie nennt man eine Sackgasse ohne Durchfahrt?", "Sackgasse", ["sackgasse"]),
        row("Wie nennt man den Ort, an dem Busse regelmaessig halten?", "Haltestelle", ["haltestelle"]),
        row("Wie nennt man die lokale politische Vertretung einer Gemeinde?", "Gemeinderat", ["gemeinderat"]),
        row("Wie nennt man die Gebuehr fuer die Entsorgung von Restmuell?", "Muellgebuehr", ["muellgebuehr"]),
        row("Wie nennt man den Plan mit Flurstuecken und Grenzen?", "Kataster", ["kataster"]),
        row("Wie nennt man eine behoerdliche Genehmigung zum Bauen?", "Baugenehmigung", ["baugenehmigung"]),
        row("Wie nennt man die zustaendige Stelle fuer Bauantraege?", "Bauamt", ["bauamt"]),
        row("Wie nennt man den Bereich ausserhalb dichter Bebauung?", "Aussenbereich", ["aussenbereich"]),
        row("Wie nennt man die oeffentliche Sammlung lokaler Vorschriften?", "Satzung", ["satzung"]),
        row("Wie nennt man den Weg fuer Fussgaenger ohne Autoverkehr?", "Fussgaengerzone", ["fussgaengerzone"]),
        row("Wie nennt man die regelmaessige Erfassung der Einwohnerzahl?", "Einwohnerstatistik", ["einwohnerstatistik"]),
        row("Wie nennt man den zentralen Verkehrs- und Aufenthaltsraum einer Gemeinde oft?", "Marktplatz", ["marktplatz"]),
    ]

    return cats


def build_question_bank(cats):
    bank = []
    for cat, facts in cats.items():
        for fact in facts:
            q1 = fact["q"]
            q2 = f"Welche Antwort ist korrekt: {fact['q']}"
            q3 = f"Gib die exakte Loesung an: {fact['q']}"
            bank.append((cat, 1, q1, fact["a"], fact["alts"]))
            bank.append((cat, 2, q2, fact["a"], fact["alts"]))
            bank.append((cat, 3, q3, fact["a"], fact["alts"]))

    uniq = []
    seen = set()
    for cat, diff, q, a, alts in bank:
        key = (cat, diff, q.strip().lower())
        if key in seen:
            continue
        seen.add(key)
        uniq.append((cat, diff, q, a, alts))
    return uniq


def write_sql(rows, out_path):
    lines = []
    lines.append("-- Real quiz bank import (no demo/test placeholders)")
    lines.append("START TRANSACTION;")
    lines.append("")
    lines.append("CREATE TABLE IF NOT EXISTS quiz_questions (")
    lines.append("  id BIGINT NOT NULL AUTO_INCREMENT,")
    lines.append("  question TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,")
    lines.append("  answers_json LONGTEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,")
    lines.append("  category VARCHAR(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,")
    lines.append("  difficulty TINYINT NULL,")
    lines.append("  is_active TINYINT(1) NOT NULL DEFAULT 1,")
    lines.append("  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,")
    lines.append("  PRIMARY KEY (id),")
    lines.append("  KEY idx_active (is_active),")
    lines.append("  KEY idx_category (category),")
    lines.append("  KEY idx_diff (difficulty)")
    lines.append(") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;")
    lines.append("")
    lines.append("DELETE FROM quiz_questions;")
    lines.append("")
    lines.append("INSERT INTO quiz_questions (question, answers_json, category, difficulty, is_active, created_at) VALUES")

    vals = []
    for cat, diff, q, a, alts in rows:
        answers = json.dumps({"correct": a, "alts": alts}, ensure_ascii=False)
        q_sql = q.replace("'", "''")
        c_sql = cat.replace("'", "''")
        a_sql = answers.replace("'", "''")
        vals.append(f"('{q_sql}', '{a_sql}', '{c_sql}', {diff}, 1, NOW())")
    lines.append(",\n".join(vals) + ";")
    lines.append("")
    lines.append("COMMIT;")

    out_path.write_text("\n".join(lines), encoding="utf-8")


if __name__ == "__main__":
    root = Path(__file__).resolve().parents[1]
    out = root / "migrations" / "2026-04-19_seed_quiz_questions_real_bank.sql"
    categories = build_categories()
    rows = build_question_bank(categories)
    write_sql(rows, out)
    print(f"Wrote {out} with {len(rows)} rows.")
