# from app.api.centralised_and_direct import schema
# from app.models.main.centralised_and_direct import TblCentralisedAndDirect
# from app.utils.schemas_utils import CustomResponse
# from sqlalchemy.orm import Session
# from app.dependency.authantication import JWTPayloadSchema
# from app.locale.messages import Messages
# from fastapi import HTTPException

# # class CentralisedAndDirectService:
# #     def __init__(self, db:Session, token:JWTPayloadSchema):
# #         self.db = db
# #         self.token = token
        
# #     async def create_centralised_and_direct(self, request:schema.DistributionCreate):
# #         if request.distribution_type == "Centralised Warehouse Distribution":
# #             centralised_schema = schema.CentralisedCreate(**request.centralised)
# #             new_data = TblCentralisedAndDirect.create_centralised_and_direct(**centralised_schema.model_dump())
# #             self.db.add(new_data)
            
# #         elif request.distribution_type == "Direct Store Delivery Distribution":
# #             direct_schema = schema.DirectCreate(**request.direct)
# #             new_data = TblCentralisedAndDirect.create_centralised_and_direct(**direct_schema.model_dump())
# #             self.db.add(new_data)
            
# #         else:
# #             raise HTTPException(status_code=400, detail="Invalid distribution type")
        
# #         self.db.commit()
# #         self.db.refresh(new_data)
# #         return {"message": f"{request.distribution_type} saved successfully"}

# class CentralisedAndDirectService:
#     def __init__(self, db: Session, token: JWTPayloadSchema):
#         self.db = db
#         self.token = token

#     async def create_centralised_and_direct(self, request: schema.DistributionCreate):
#         if request.distribution_type == "Centralised Warehouse Distribution":
#             if not request.centralised:
#                 raise HTTPException(status_code=422, detail="Centralised data required")
#             centralised_schema = schema.CentralisedCreate(**request.centralised.model_dump())
#             new_data = TblCentralisedAndDirect.create_centralised_and_direct(centralised_schema, self.db)

#         elif request.distribution_type == "Direct Store Delivery Distribution":
#             if not request.direct:
#                 raise HTTPException(status_code=422, detail="Direct data required")
#             direct_schema = schema.DirectCreate(**request.direct.model_dump())
#             new_data = TblCentralisedAndDirect.create_centralised_and_direct(direct_schema, self.db)

#         else: 
#             raise HTTPException(status_code=400, detail="Invalid distribution type")

#         self.db.commit()
#         self.db.refresh(new_data)
#         return {"message": f"{request.distribution_type} saved successfully"}

from app.api.centralised_and_direct import schema
from app.models.main.centralised_and_direct import TblCentralisedAndDirect
from sqlalchemy.orm import Session
from app.dependency.authantication import JWTPayloadSchema
from fastapi import HTTPException

class CentralisedAndDirectService:
    def __init__(self, db: Session, token: JWTPayloadSchema):
        self.db = db
        self.token = token

    async def create_centralised_and_direct(self, request: schema.DistributionCreate):
        if request.distribution_type == "Centralised Warehouse Distribution":
            if not request.centralised:
                raise HTTPException(status_code=422, detail="Centralised data required")
            new_data = TblCentralisedAndDirect.create_centralised_and_direct(request.centralised, self.db)

        elif request.distribution_type == "Direct Store Delivery Distribution":
            if not request.direct:
                raise HTTPException(status_code=422, detail="Direct data required")
            new_data = TblCentralisedAndDirect.create_centralised_and_direct(request.direct, self.db)

        else:
            raise HTTPException(status_code=400, detail="Invalid distribution type")

        self.db.commit()
        self.db.refresh(new_data)
        return {"message": f"{request.distribution_type} saved successfully"}
