from fastapi import HTTPException
from sqlalchemy.orm import Session
from app.api.store_formate_pricing_strategies import schema
from app.dependency.authantication import JWTPayloadSchema
from app.locale.messages import Messages
from app.models.main.store_formate_pricing_strategies import StoreFormatepricingStrategiesBase, TblStoreFormatepricingStrategies
from app.utils.schemas_utils import CustomResponse

class StoreFormatepricingStrategiesService:
    def  __init__(self, db:Session, token:JWTPayloadSchema):
        self.db = db
        self.token = token
    
    # async def create_store_formate_pricing_strategies(self, request:schema.StoreFormatepricingStrategiesCreate):
    #     created_store_formate_pricing_strategies = StoreFormatepricingStrategiesBase.model_validate(request.model_dump())
    #     TblStoreFormatepricingStrategies.create_store_formate_pricing_strategies(created_store_formate_pricing_strategies, self.db)
    #     self.db.commit()
    #     return CustomResponse(status="1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES)
    
    async def create_store_formate(self, request:schema.StoreFormatepricingStrategiesCreate):
        created_store_formate = StoreFormatepricingStrategiesBase.model_validate(request.model_dump())
        TblStoreFormatepricingStrategies.create_stor_formate(created_store_formate, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES)
        
    async def get_store_formate_pricing_strategies(self, store_get_id:int):
        new_get_store_formate_pricing_strategies = TblStoreFormatepricingStrategies.get_store_formate_pricing_strategies(store_get_id, self.db)
        if not new_get_store_formate_pricing_strategies:
            raise HTTPException(status_code=404, detail="Get ID not found")
        return schema.StoreFormatepricingStrategiesResponse.model_validate(new_get_store_formate_pricing_strategies)
    
    async def get_group_store_formate_pricing_strategies(self, group_id:int) ->"TblStoreFormatepricingStrategies":
        new_get_group_store_formate_pricing_strategies = self.db.query(TblStoreFormatepricingStrategies).filter(TblStoreFormatepricingStrategies.group_id == group_id).all()
        if not new_get_group_store_formate_pricing_strategies:
            raise HTTPException(status_code=404, detail="Get Group ID not found")
        return [schema.StoreFormatepricingStrategiesResponse.model_validate(get_group) for get_group in new_get_group_store_formate_pricing_strategies]
    
    # async def update_store_formate(self, request:schema.StoreFormatepricingStrategiesUpdate):
    #     new_update_store_formate_pricing_strategies = StoreFormatepricingStrategiesBase.model_validate(request.model_dump())
    #     if new_update_store_formate_pricing_strategies.store_id is None:
    #         return CustomResponse(status="-1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES_NOT)
    #     TblStoreFormatepricingStrategies.update_store_formate(new_update_store_formate_pricing_strategies.store_id, new_update_store_formate_pricing_strategies, self.db)
    #     return CustomResponse(status="1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES_UPDATE)
    
    async def update_store_formate(self, request:schema.StoreFormatepricingStrategiesUpdate):
        updated_store_formate = StoreFormatepricingStrategiesBase.model_validate(request.model_dump())
        if updated_store_formate.store_id is None:
            return CustomResponse(status="-1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES_NOT)
        TblStoreFormatepricingStrategies.update_store_formate(updated_store_formate.store_id, updated_store_formate, self.db)
        return CustomResponse(status="1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES_UPDATE)
    
    async def delete_store_formate_pricing_strategies(self, group_id:int):
        new_delete_store_formate_pricing_strategies = TblStoreFormatepricingStrategies.delete_store_formate_pricing_strategies(group_id, self.db)
        if not new_delete_store_formate_pricing_strategies:
            return CustomResponse(status="-1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES_NOT)
        return CustomResponse(status="1", message=Messages.STORE_FORMATE_PRICING_STRATEGIES_DELETED)
    
        