from datetime import date

from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
from sqlmodel import Session

from app.db.session import get_session
from app.services.daily_math import answer_quiz, assignments_for_day

router = APIRouter(tags=["daily-math"])


class MathAnswerRequest(BaseModel):
    child_id: int
    date: date
    task_id: int
    selected_answer: str = Field(min_length=1, max_length=80)


@router.get("/daily-math")
def get_daily_math(date: date = Query(...), session: Session = Depends(get_session)):
    return assignments_for_day(session, date, quiz=False)


@router.get("/daily-math/quiz")
def get_daily_math_quiz(date: date = Query(...), session: Session = Depends(get_session)):
    return assignments_for_day(session, date, quiz=True)


@router.post("/daily-math/quiz-answer")
def post_daily_math_answer(payload: MathAnswerRequest, session: Session = Depends(get_session)):
    try:
        return answer_quiz(session, payload.child_id, payload.date, payload.task_id, payload.selected_answer)
    except ValueError as exc:
        raise HTTPException(status_code=404, detail={"code": "daily_math_not_found", "message": str(exc)}) from exc
