from fastapi import APIRouter, Depends, status

from app.deps import verify_internal_token
from app.schemas.puzzles import (
    PuzzleGenerateRequest,
    PuzzleGenerateResponse,
    PuzzleGradeRequest,
    PuzzleGradeResponse,
)
from app.services.puzzles import PuzzlesService

router = APIRouter(prefix="/puzzles")
_service = PuzzlesService()


@router.post(
    "/generate",
    response_model=PuzzleGenerateResponse,
    status_code=status.HTTP_200_OK,
    summary="Timed Puzzle Challenge Generator",
    dependencies=[Depends(verify_internal_token)],
)
async def generate_puzzles(payload: PuzzleGenerateRequest) -> PuzzleGenerateResponse:
    return await _service.generate(payload)


@router.post(
    "/grade",
    response_model=PuzzleGradeResponse,
    status_code=status.HTTP_200_OK,
    summary="Puzzle Challenge Grading",
    dependencies=[Depends(verify_internal_token)],
)
async def grade_puzzles(payload: PuzzleGradeRequest) -> PuzzleGradeResponse:
    return await _service.grade(payload)
