"""Verification endpoints."""

from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel
from sqlalchemy.orm import Session

from app.api.deps import get_db
from app.schemas.common import ErrorResponse, SuccessResponse
from app.services.verification_service import VerificationService

router = APIRouter(prefix="/verify", tags=["verification"])


class NINVerificationRequest(BaseModel):
    nin: str
    firstName: str
    lastName: str


class WAECVerificationRequest(BaseModel):
    waecNumber: str
    waecYear: str
    skipVerification: bool = False  # New field to allow skipping verification


class BusinessVerificationRequest(BaseModel):
    businessName: str
    cacNumber: str
    companyType: str  # BUSINESS_NAME, COMPANY, INCORPORATED_TRUSTEES, LIMITED_PARTNERSHIP, LIMITED_LIABILITY_PARTNERSHIP


@router.post("/nin", response_model=SuccessResponse)
async def verify_nin(
    request: NINVerificationRequest,
    db: Session = Depends(get_db),
):
    """Verify NIN (National Identification Number)."""
    result = VerificationService.verify_nin(
        request.nin,
        request.firstName,
        request.lastName,
        db,  # Pass database session for caching
    )
    
    if not result.get("verified"):
        return SuccessResponse(
            data=result,
            message=result.get("message", "NIN verification failed"),
            success=False,
        )
    
    return SuccessResponse(
        data=result,
        message="NIN verified successfully",
    )


@router.post("/waec", response_model=SuccessResponse)
async def verify_waec(
    request: WAECVerificationRequest,
    db: Session = Depends(get_db),
):
    """Verify WAEC/NECO results or collect data for later verification."""
    result = VerificationService.verify_waec(
        request.waecNumber,
        request.waecYear,
        skip_verification=request.skipVerification,  # Pass the flag
    )
    
    if not result.get("verified"):
        return SuccessResponse(
            data=result,
            message=result.get("message", "WAEC verification failed"),
            success=False,
        )
    
    # If verification is pending, use a different message
    if result.get("verification_pending"):
        return SuccessResponse(
            data=result,
            message=result.get("message", "WAEC data collected successfully"),
        )
    
    return SuccessResponse(
        data=result,
        message="WAEC results verified successfully",
    )


@router.post("/business", response_model=SuccessResponse)
async def verify_business(
    request: BusinessVerificationRequest,
    db: Session = Depends(get_db),
):
    """Verify business name and CAC/registration number using Dojah API."""
    result = VerificationService.verify_business(
        request.businessName,
        request.cacNumber,
        request.companyType,
        db,  # Pass database session for caching
    )

    if not result.get("verified"):
        return SuccessResponse(
            data=result,
            message=result.get("message", "Business verification failed"),
            success=False,
        )

    return SuccessResponse(
        data=result,
        message="Business verified successfully",
    )
