"""
리비전 리다이렉트 API 엔드포인트
BOM 페이지 접근 시 리비전 페이지로 리다이렉트 필요성 판단
"""

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from typing import Optional

from ..database import get_db
from ..auth.middleware import get_current_user
from ..services.revision_logic_service import RevisionLogicService
from ..auth.models import User
from ..utils.logger import get_logger

logger = get_logger(__name__)

router = APIRouter(prefix="/revision-redirect", tags=["Revision Redirect"])


@router.get("/check/{job_no}/{file_id}")
async def check_revision_redirect(
    job_no: str,
    file_id: int,
    previous_file_id: Optional[int] = None,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_user)
):
    """
    리비전 페이지 리다이렉트 필요성 확인
    
    Args:
        job_no: 작업 번호
        file_id: 현재 파일 ID
        previous_file_id: 이전 파일 ID (선택사항)
    
    Returns:
        {
            "should_redirect": bool,
            "reason": str,
            "redirect_url": str,
            "processing_summary": dict
        }
    """
    
    try:
        revision_service = RevisionLogicService(db)
        
        # 리다이렉트 필요성 판단
        should_redirect, reason = revision_service.should_redirect_to_revision_page(
            job_no=job_no,
            current_file_id=file_id,
            previous_file_id=previous_file_id
        )
        
        result = {
            "should_redirect": should_redirect,
            "reason": reason,
            "redirect_url": f"/enhanced-revision?job_no={job_no}&current_file_id={file_id}",
            "processing_summary": None
        }
        
        # 상세 처리 결과도 함께 반환 (필요시)
        if should_redirect:
            processing_result = revision_service.process_revision_by_purchase_status(
                job_no=job_no,
                current_file_id=file_id,
                previous_file_id=previous_file_id
            )
            result["processing_summary"] = processing_result["summary"]
        
        logger.info(f"Revision redirect check for {job_no}/{file_id}: {should_redirect}")
        
        return {
            "success": True,
            "data": result,
            "message": "리비전 리다이렉트 확인 완료"
        }
        
    except Exception as e:
        logger.error(f"Failed to check revision redirect: {e}")
        raise HTTPException(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            detail=f"리비전 리다이렉트 확인 중 오류가 발생했습니다: {str(e)}"
        )


@router.post("/process-revision/{job_no}/{file_id}")
async def process_revision_logic(
    job_no: str,
    file_id: int,
    previous_file_id: Optional[int] = None,
    db: Session = Depends(get_db),
    current_user: User = Depends(get_current_user)
):
    """
    리비전 로직 처리 및 결과 반환
    
    Args:
        job_no: 작업 번호
        file_id: 현재 파일 ID
        previous_file_id: 이전 파일 ID (선택사항)
    
    Returns:
        전체 리비전 처리 결과
    """
    
    try:
        revision_service = RevisionLogicService(db)
        
        processing_result = revision_service.process_revision_by_purchase_status(
            job_no=job_no,
            current_file_id=file_id,
            previous_file_id=previous_file_id
        )
        
        logger.info(f"Revision processing completed for {job_no}/{file_id}")
        
        return {
            "success": True,
            "data": processing_result,
            "message": "리비전 처리 완료"
        }
        
    except Exception as e:
        logger.error(f"Failed to process revision logic: {e}")
        raise HTTPException(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            detail=f"리비전 처리 중 오류가 발생했습니다: {str(e)}"
        )
