# from fastapi import APIRouter, UploadFile, File, Response
# from app.modules.bgRemover.service import process_image

# router = APIRouter()

# @router.post("/remove-bg")
# async def remove_bg(file: UploadFile = File(...)):
#     image_data = await file.read()
#     processed_image = process_image(image_data)
    
#     return Response(content=processed_image, media_type="image/png")


# from fastapi import APIRouter, UploadFile, File, Response, Header, HTTPException, status
# from app.modules.bgRemover.service import process_image
# from app.modules.device_limit.device_limit_repository import DeviceLimitRepository

# router = APIRouter()
# limit_repo = DeviceLimitRepository()

# @router.post("/remove-bg")
# async def remove_bg(
#     file: UploadFile = File(...),
#     device_id: str = Header(None, alias="X-Device-Id") # App header se device_id aayega
# ):
#     if not device_id:
#         raise HTTPException(
#             status_code=status.HTTP_400_BAD_REQUEST, 
#             detail="Device ID (X-Device-Id) is required in headers."
#         )

#     # 1. Limit Check Karo
#     is_allowed = await limit_repo.check_and_increment_limit(device_id)
    
#     if not is_allowed:
#         # Agar 5 images complete ho gayi hain, to 403 Forbidden error throw karo
#         # Isme payload ja raha hai taaki frontend samajh sake ki premium screen dikhani hai
#         raise HTTPException(
#             status_code=status.HTTP_403_FORBIDDEN,
#             detail={
#                 "success": False,
#                 "trigger_subscription": True,
#                 "message": "Daily limit reached. Please subscribe to continue!"
#             }
#         )

#     # 2. Agar limit bachi hai, to image process karke return karo
#     image_data = await file.read()
#     processed_image = process_image(image_data)
    
#     return Response(content=processed_image, media_type="image/png")



from fastapi import (
    APIRouter,
    UploadFile,
    File,
    Response,
    Header,
    HTTPException,
    Depends,
)

from fastapi.security import (
    HTTPBearer,
    HTTPAuthorizationCredentials,
)

from app.utils.jwt import verify_access_token

from app.modules.bgRemover.service import process_image

from app.modules.device_limit.device_limit_repository import (
    DeviceLimitRepository
)

from app.dependencies.auth_dependancy import (
    get_current_user
)

from app.helpers.subscription_helper import (
    is_premium_user
)

from app.modules.user_subscription.user_subscription_service import UserSubscriptionService

subscription_service = UserSubscriptionService()

security = HTTPBearer(
    auto_error=False
)

router = APIRouter()

limit_repo = DeviceLimitRepository()
@router.post("/remove-bg")
async def remove_bg(

    file: UploadFile = File(...),

    device_id: str = Header(
        ...,
        alias="X-Device-Id"
    ),

    credentials: HTTPAuthorizationCredentials = Depends(
        security
    )

):

    premium_user = False

    if credentials:

        token = credentials.credentials


        payload = verify_access_token(
            token
        )

        if payload:

            premium_user = await subscription_service.has_active_subscription(
                payload["_id"]
            )


    if not premium_user:

        allowed = await limit_repo.check_and_increment_limit(
            device_id
        )

        if not allowed:

            raise HTTPException(
                status_code=403,
                detail={
                    "success": False,
                    "trigger_subscription": True,
                    "message": "Daily limit reached"
                }
            )

    image_data = await file.read()

    processed = process_image(
        image_data
    )

    return Response(
        content=processed,
        media_type="image/png"
    )