# from fastapi import APIRouter, UploadFile, File, Response
# from fastapi.concurrency import run_in_threadpool

# from app.modules.enhanceImage.service import enhance_image_service

# router = APIRouter()

# @router.post("/enhance-4k")
# async def enhance_4k(
#     file: UploadFile = File(...)
# ):
#     image_bytes = await file.read()

#     enhanced_image = await run_in_threadpool(
#         enhance_image_service,
#         image_bytes
#     )

#     return Response(
#         content=enhanced_image,
#         media_type="image/png"
#     )



from fastapi import APIRouter, UploadFile, File, Response, Header, HTTPException, status
from fastapi.concurrency import run_in_threadpool
from app.modules.enhanceImage.service import enhance_image_service
from app.modules.device_limit.device_limit_repository import DeviceLimitRepository

router = APIRouter()
limit_repo = DeviceLimitRepository()

@router.post("/enhance-4k")
async def enhance_4k(
    file: 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:
        # Agar 5 photos poori ho chuki hain, to image process mat karo aur 403 error do
        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 karne do
    image_bytes = await file.read()

    enhanced_image = await run_in_threadpool(
        enhance_image_service,
        image_bytes
    )

    return Response(
        content=enhanced_image,
        media_type="image/png"
    )