from datetime import datetime

from pydantic import BaseModel


class QuizCreate(BaseModel):
    model_config = {"protected_namespaces": ()}

    section_id: int | None = None
    title: str
    mode: str = "timed"  # timed, learning
    time_limit_minutes: int | None = None
    model_id: str | None = None  # override extraction model
    question_category_id: int | None = None  # assign extracted questions to this bank category
    extraction_mode: str = "standard"
    # standard      — current working mode (inline Correct Answer / Preferred Response)
    # questions_only — extract Q+options only, no answers (admin fills later)
    # two_step       — separate answer key section (PREP 2013 style)
    # regex          — AI analyses format then extracts answer key with regex
    # ai_decide      — AI reads a sample and decides which approach to use


class QuizUpdate(BaseModel):
    title: str


class QuestionResponse(BaseModel):
    id: int
    question_text: str
    question_type: str
    options: list[str] | None
    image_path: str | None = None

    class Config:
        from_attributes = True


class QuestionWithAnswer(QuestionResponse):
    correct_answer: str
    explanation: str | None
    page_reference: int | None


class QuizResponse(BaseModel):
    id: int
    section_id: int | None = None
    user_id: int
    title: str
    questions_count: int
    mode: str
    time_limit_minutes: int | None
    skipped_questions: str | None = None
    category_id: int | None = None
    created_at: datetime
    deleted_at: datetime | None = None
    is_published: int = 1
    is_shared: int = 0
    questions_per_attempt: int | None = None

    class Config:
        from_attributes = True


class QuizDetail(QuizResponse):
    questions: list[QuestionResponse] = []


class QuizLearningDetail(QuizResponse):
    """Learning mode — includes answers and explanations."""
    questions: list[QuestionWithAnswer] = []


class QuizReview(QuizResponse):
    questions: list[QuestionWithAnswer] = []
