# from fastapi import APIRouter, UploadFile, File, Response
# from fastapi.concurrency import run_in_threadpool

# from app.modules.replaceBG.replaceBG_service import (
#     replace_background_service
# )

# router = APIRouter()


# @router.post("/replace-background")
# async def replace_background(
#     image: UploadFile = File(...),
#     background: UploadFile = File(...)
# ):
#     image_bytes = await image.read()
#     background_bytes = await background.read()

#     result = await run_in_threadpool(
#         replace_background_service,
#         image_bytes,
#         background_bytes
#     )

#     return Response(
#         content=result,
#         media_type="image/png"
#     )


from fastapi import APIRouter, UploadFile, File, Response, Header, HTTPException, status
from fastapi.concurrency import run_in_threadpool
from app.modules.replaceBG.replaceBG_service import replace_background_service
from app.modules.device_limit.device_limit_repository import DeviceLimitRepository

router = APIRouter()
limit_repo = DeviceLimitRepository()

@router.post("/replace-background")
async def replace_background(
    image: UploadFile = File(...),
    background: UploadFile = File(...),
    device_id: str = Header(None, alias="X-Device-Id") # Mobile App se unique ID header me aayegi
):
    # 1. Check karo ki Device ID aayi hai ya nahi
    if not device_id:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST, 
            detail="Device ID (X-Device-Id) is required in headers."
        )

    # 2. Limit Check Karo (Kya user 5 free image limit ke andar hai?)
    is_allowed = await limit_repo.check_and_increment_limit(device_id)
    
    if not is_allowed:
        # 5 photos poori hone par 403 Forbidden error throw karega
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN,
            detail={
                "success": False,
                "trigger_subscription": True,
                "message": "Daily limit reached. Please subscribe to continue!"
            }
        )

    # 3. Agar limit bachi hai, to image process hone do
    image_bytes = await image.read()
    background_bytes = await background.read()

    result = await run_in_threadpool(
        replace_background_service,
        image_bytes,
        background_bytes
    )

    return Response(
        content=result,
        media_type="image/png"
    )