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_phrases import answer_quiz, assignments_for_day

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


class QuizAnswerRequest(BaseModel):
    child_id: int
    date: date
    slot: str | None = None
    phrase_id: int
    selected_answer: str = Field(min_length=1, max_length=240)


@router.get("/daily-phrases")
def get_daily_phrases(date: date = Query(...), slot: str | None = Query(default=None), session: Session = Depends(get_session)):
    return assignments_for_day(session, date, slot=slot, quiz=False)


@router.get("/daily-phrases/quiz")
def get_daily_phrase_quiz(date: date = Query(...), slot: str | None = Query(default=None), session: Session = Depends(get_session)):
    return assignments_for_day(session, date, slot=slot, quiz=True)


@router.post("/daily-phrases/quiz-answer")
def post_daily_phrase_answer(payload: QuizAnswerRequest, session: Session = Depends(get_session)):
    try:
        return answer_quiz(session, payload.child_id, payload.date, payload.slot, payload.phrase_id, payload.selected_answer)
    except ValueError as exc:
        raise HTTPException(status_code=404, detail={"code": "daily_phrase_not_found", "message": str(exc)}) from exc
