import genanki
import csv, os, random

# Variablen
csv_datei = "LZMP3.csv"  # CSV-Datei mit Fragen, Antworten und Audio-Dateien
ausgabe_datei = "LZMP3.apkg"  # Name der Ausgabedatei
media_files = []  # Liste der Medien (MP3-Dateien)

# Eindeutige IDs
deck_id = 123456789
model_id = 987654321

# Deck erstellen
deck_name = "LZ mit MP3"
my_deck = genanki.Deck(deck_id, deck_name)

# Anki-Modell mit Audio-Unterstützung
my_model = genanki.Model(
    model_id,
    "Audio-Karten-Modell",
    fields=[
        {"name": "Frage"},
        {"name": "Antwort"},
        {"name": "Audio"},
    ],
    templates=[
        {
            "name": "Standard-Karte mit Audio",
            "qfmt": "{{Frage}}",
            "afmt": '{{FrontSide}}<hr id="answer">{{Antwort}}<br>{{Audio}}',
        },
    ],
    css="""
    .card {
      font-family: Arial, sans-serif;
      font-size: 20px;
      text-align: center;
      color: black;
      background-color: white;
    }
    """,
)

notes = []  # Liste für Notizen
karten_anzahl = 0

with open(csv_datei, "r", encoding="utf-8") as file:
    reader = csv.reader(file, delimiter=";")
    next(reader)  # Kopfzeile überspringen
    for i, row in enumerate(reader, start=2):
        if len(row) < 2:  # Mindestens zwei Spalten notwendig
            print(f"Warnung: Zeile {i} hat zu wenige Spalten und wird übersprungen: {row}")
            continue

        frage, antwort = row[:2]
        audio_datei = row[2].strip() if len(row) > 2 else ""

        # MP3-Datei zur Medienliste hinzufügen, falls vorhanden
        if audio_datei and os.path.exists(audio_datei):
            media_files.append(audio_datei)
            audio_html = f'[sound:{os.path.basename(audio_datei)}]'  # MP3-Datei in Anki-Format
        else:
            audio_html = ""  # Kein Audio

        # Notiz erstellen und in Liste speichern
        note = genanki.Note(
            model=my_model,
            fields=[frage.strip(), antwort.strip(), audio_html],
            tags=["Audio"],
        )
        notes.append(note)
        karten_anzahl += 1

if karten_anzahl == 0:
    print("Fehler: Es wurden keine Karten erstellt. Überprüfe die CSV-Datei.")
else:
    print(f"{karten_anzahl} Karten erfolgreich erstellt.")

# Notizen zufällig mischen
random.shuffle(notes)

# Gemischte Notizen zum Deck hinzufügen
for note in notes:
    my_deck.add_note(note)

# Stapel exportieren mit Medien
package = genanki.Package(my_deck)
package.media_files = media_files  # Medien hinzufügen
package.write_to_file(ausgabe_datei)

print(f"Stapel wurde erfolgreich unter '{ausgabe_datei}' gespeichert!")