from fastapi import APIRouter, Depends, status

from app.deps import verify_internal_token
from app.schemas.extra import InterviewSummarizeRequest, InterviewSummarizeResponse
from app.schemas.interviews import (
    EvaluateAnswerRequest,
    EvaluateAnswerResponse,
    FollowUpRequest,
    FollowUpResponse,
)
from app.schemas.helpers import NextQuestionRequest, NextQuestionResponse
from app.services.extra import InterviewSummarizeService
from app.services.interviews import InterviewsService
from app.services.helpers import NextQuestionService

router = APIRouter(prefix="/interviews")
_service = InterviewsService()
_summarize = InterviewSummarizeService()
_next = NextQuestionService()


@router.post(
    "/follow-up",
    response_model=FollowUpResponse,
    status_code=status.HTTP_200_OK,
    summary="Adaptive Interview Follow-up Questions",
    dependencies=[Depends(verify_internal_token)],
)
async def generate_follow_up(payload: FollowUpRequest) -> FollowUpResponse:
    return await _service.generate_follow_up(payload)


@router.post(
    "/evaluate-answer",
    response_model=EvaluateAnswerResponse,
    status_code=status.HTTP_200_OK,
    summary="Real-Time Answer Evaluation",
    dependencies=[Depends(verify_internal_token)],
)
async def evaluate_answer(payload: EvaluateAnswerRequest) -> EvaluateAnswerResponse:
    return await _service.evaluate_answer(payload)


@router.post(
    "/next-question",
    response_model=NextQuestionResponse,
    status_code=status.HTTP_200_OK,
    summary="Adaptive Next Interview Question",
    dependencies=[Depends(verify_internal_token)],
)
async def next_question(payload: NextQuestionRequest) -> NextQuestionResponse:
    return await _next.choose(payload)


@router.post(
    "/summarize",
    response_model=InterviewSummarizeResponse,
    status_code=status.HTTP_200_OK,
    summary="End-of-Interview AI Summary",
    dependencies=[Depends(verify_internal_token)],
)
async def summarize_interview(
    payload: InterviewSummarizeRequest,
) -> InterviewSummarizeResponse:
    return await _summarize.summarize(payload)
