"""
Quiz Models - Datenmodelle fuer Quiz-Generierung.

Enthaelt alle Dataclasses und Enums fuer Quiz-Typen:
- True/False Fragen
- Zuordnungsaufgaben (Matching)
- Sortieraufgaben
- Offene Fragen
"""

from typing import List, Any, Optional
from dataclasses import dataclass
from enum import Enum


class QuizType(str, Enum):
    """Typen von Quiz-Aufgaben."""
    TRUE_FALSE = "true_false"
    MATCHING = "matching"
    SORTING = "sorting"
    OPEN_ENDED = "open_ended"


@dataclass
class TrueFalseQuestion:
    """Eine Wahr/Falsch-Frage."""
    statement: str
    is_true: bool
    explanation: str
    source_reference: Optional[str] = None


@dataclass
class MatchingPair:
    """Ein Zuordnungspaar."""
    left: str
    right: str
    hint: Optional[str] = None


@dataclass
class SortingItem:
    """Ein Element zum Sortieren."""
    text: str
    correct_position: int
    category: Optional[str] = None


@dataclass
class OpenQuestion:
    """Eine offene Frage."""
    question: str
    model_answer: str
    keywords: List[str]
    points: int = 1


@dataclass
class Quiz:
    """Ein komplettes Quiz."""
    quiz_type: QuizType
    title: str
    questions: List[Any]  # Je nach Typ unterschiedlich
    topic: Optional[str] = None
    difficulty: str = "medium"
