from fastapi import APIRouter, Depends, status

from app.deps import verify_internal_token
from app.schemas.interview_preview import (
    InterviewPreviewRequest,
    InterviewPreviewResponse,
    RegenerateQuestionRequest,
    RegenerateQuestionResponse,
)
from app.schemas.helpers import (
    FollowUpLogicRequest,
    FollowUpLogicResponse,
    InterviewValidateLockRequest,
    InterviewValidateLockResponse,
    MergeCustomQuestionsRequest,
    MergeCustomQuestionsResponse,
)
from app.services.interview_preview import InterviewPreviewService
from app.services.helpers import (
    FollowUpLogicService,
    InterviewLockValidateService,
    MergeCustomQuestionsService,
)

router = APIRouter(prefix="/interview-preview")
_service = InterviewPreviewService()
_lock = InterviewLockValidateService()
_followups = FollowUpLogicService()
_merge = MergeCustomQuestionsService()


@router.post(
    "/generate",
    response_model=InterviewPreviewResponse,
    status_code=status.HTTP_200_OK,
    summary="Interview Preview Pack Generator",
    dependencies=[Depends(verify_internal_token)],
)
async def generate_preview(payload: InterviewPreviewRequest) -> InterviewPreviewResponse:
    return await _service.generate(payload)


@router.post(
    "/regenerate-question",
    response_model=RegenerateQuestionResponse,
    status_code=status.HTTP_200_OK,
    summary="Interview Question Regenerator",
    dependencies=[Depends(verify_internal_token)],
)
async def regenerate_question(
    payload: RegenerateQuestionRequest,
) -> RegenerateQuestionResponse:
    return await _service.regenerate_question(payload)


@router.post(
    "/validate-lock",
    response_model=InterviewValidateLockResponse,
    status_code=status.HTTP_200_OK,
    summary="Interview Lock / Publish Validator",
    dependencies=[Depends(verify_internal_token)],
)
async def validate_lock(
    payload: InterviewValidateLockRequest,
) -> InterviewValidateLockResponse:
    return await _lock.validate(payload)


@router.post(
    "/define-follow-up-logic",
    response_model=FollowUpLogicResponse,
    status_code=status.HTTP_200_OK,
    summary="Interview Follow-up Logic Builder",
    dependencies=[Depends(verify_internal_token)],
)
async def define_follow_up_logic(
    payload: FollowUpLogicRequest,
) -> FollowUpLogicResponse:
    return await _followups.define(payload)


@router.post(
    "/merge-custom-questions",
    response_model=MergeCustomQuestionsResponse,
    status_code=status.HTTP_200_OK,
    summary="Custom Company Questions Merger",
    dependencies=[Depends(verify_internal_token)],
)
async def merge_custom_questions(
    payload: MergeCustomQuestionsRequest,
) -> MergeCustomQuestionsResponse:
    return await _merge.merge(payload)
