# from fastapi import HTTPException

# from app.modules.subscription.subscrption_service import SubscriptionService



# class SubscriptionController:

#     def __init__(self):
#         self.service = SubscriptionService()

#     async def create_plan(
#         self,
#         subscription
#     ):
#         plan = await self.service.create_plan(
#             subscription
#         )

#         return {
#             "success": True,
#             "message": "Plan created successfully",
#             "data": plan
#         }

#     async def get_all_plans(self):

#         plans = await self.service.get_all_plans()

#         return {
#             "success": True,
#             "data": plans
#         }

#     async def get_user_plan(
#         self,
#         user_id: str
#     ):

#         plan = await self.service.get_user_plan(
#             user_id
#         )

#         if not plan:
#             raise HTTPException(
#                 status_code=404,
#                 detail="Plan not found"
#             )

#         return {
#             "success": True,
#             "data": plan
#         }

#     async def update_plan(
#         self,
#         plan_id: str,
#         payload
#     ):

#         try:

#             await self.service.update_plan(
#                 plan_id,
#                 payload.model_dump(
#                     exclude_unset=True
#                 )
#             )

#             return {
#                 "success": True,
#                 "message": "Plan updated successfully"
#             }

#         except Exception as e:

#             raise HTTPException(
#                 status_code=400,
#                 detail=str(e)
#             )

#     async def delete_plan(
#         self,
#         plan_id: str
#     ):

#         try:

#             await self.service.delete_plan(
#                 plan_id
#             )

#             return {
#                 "success": True,
#                 "message": "Plan deleted successfully"
#             }

#         except Exception as e:

#             raise HTTPException(
#                 status_code=400,
#                 detail=str(e)
#             )



from fastapi import HTTPException, status
from app.modules.subscription.subscrption_service import SubscriptionService
from app.modules.subscription.subscription_model import SubscriptionModel

class SubscriptionController:
    def __init__(self):
        self.service = SubscriptionService()

    async def create_plan(self, subscription: SubscriptionModel):
        try:
            plan = await self.service.create_plan(subscription)
            return {
                "success": True,
                "message": "Plan created successfully",
                "data": plan
            }
        except Exception as e:
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))

    async def get_all_plans(self):
        plans = await self.service.get_all_plans()
        return {
            "success": True,
            "data": plans
        }

    async def get_plan_by_id(self, plan_id: str):
        plan = await self.service.get_plan_by_id(plan_id)
        if not plan:
            raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Plan not found")
        return {
            "success": True,
            "data": plan
        }

    async def update_plan(self, plan_id: str, payload):
        try:
            await self.service.update_plan(
                plan_id,
                payload.model_dump(exclude_unset=True)
            )
            return {
                "success": True,
                "message": "Plan updated successfully"
            }
        except Exception as e:
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))

    async def delete_plan(self, plan_id: str):
        try:
            await self.service.delete_plan(plan_id)
            return {
                "success": True,
                "message": "Plan deleted successfully"
            }
        except Exception as e:
            raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))