from fastapi import APIRouter, UploadFile, Depends,File,HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from src.config.database import get_db
from src.pipeline.pipeline import PredictionPipeline
from src.common.logger import logger
from src.utils.auth import get_current_user 

router = APIRouter()

@router.post("/upload-images/")
async def upload_images(
    before_image: UploadFile = File(...),
    after_image: UploadFile = File(...),
    db: AsyncSession = Depends(get_db),
    current_user: dict = Depends(get_current_user)
):
    logger.info("Upload request received for before and after images.")
    
    try:
        if not current_user:
          logger.warning("Unauthorized upload attempt.")
          raise HTTPException(status_code=401, detail="Unauthorized")
        user_id = current_user['user_id']
        
        pipeline = PredictionPipeline(db=db, id = user_id)
        result = await pipeline.run_pipeline(before_image, after_image)
        return result
    except Exception as e:
        logger.exception("An error occurred during image upload. {e}")
        raise HTTPException(
            status_code=500,
            detail=f"An error occurred while uploading images: {str(e)}"
        )