from typing import List
from fastapi import APIRouter, Depends, Request
from sqlmodel import Session
from cachetools import TTLCache

from app.core.db import get_session
from app.core.limiter import limiter
from app.schemas.quiz import TopicResponse, QuizResponse
from app.crud import quiz as crud_quiz

router = APIRouter()
cache = TTLCache(maxsize=100, ttl=300)


@router.get("/topics", response_model=List[TopicResponse])
def read_topics(request: Request, session: Session = Depends(get_session)):
    if "topics" in cache:
        return cache["topics"]

    topics = crud_quiz.get_all_topics(session)
    cache["topics"] = topics
    return topics


@router.get("/topics/{topic_id}/quizzes", response_model=List[QuizResponse])
def read_quizzes(topic_id: str, session: Session = Depends(get_session)):
    cache_key = f"quizzes_{topic_id}"
    if cache_key in cache:
        return cache[cache_key]

    quizzes = crud_quiz.get_quizzes_with_counts(session, topic_id)
    cache[cache_key] = quizzes
    return quizzes
