from app.api.store_level_staff_needs import schema
from app.models.main.store_level_staff_needs import StoreLevelStaffNeedsBase, TblStoreLevelStaffNeeds
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 StoreLevelStaffNeedsService:
    def __init__(self, db:Session, token:JWTPayloadSchema):
        self.db = db
        self.token = token
        
    async def create_store_level_staff(self, request:schema.StoreLevelStaffNeedsCreate):
        created_store_level_staff = StoreLevelStaffNeedsBase.model_validate(request.model_dump())
        TblStoreLevelStaffNeeds.create_store_level_staff(created_store_level_staff, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.STORE_LEVEL_STAFF_NEEDS)
    
    async def get_store_level_staff(self, group_id:int):
        new_get_store_level_staff = TblStoreLevelStaffNeeds.get_store_level_staff(group_id, self.db)
        if not new_get_store_level_staff:
            raise HTTPException(status_code=404, detail="Get group ID not found")
        return [schema.StoreLevelStaffNeedsResponse.model_validate(get_group) for get_group in new_get_store_level_staff]
    
    async def update_store_level_staff(self, request:schema.StoreLevelStaffNeedsUpdate):
        updated_store_level_staff = StoreLevelStaffNeedsBase.model_validate(request.model_dump())
        if updated_store_level_staff.store_id is None:
            return CustomResponse(status="-1", message=Messages.STORE_LEVEL_STAFF_NEEDS_NOT)
        TblStoreLevelStaffNeeds.update_store_level_staff(updated_store_level_staff.store_id, updated_store_level_staff, self.db)
        return CustomResponse(status="1", message=Messages.STORE_LEVEL_STAFF_NEEDS_UPDATE)
    
    async def  delete_store_level_staff(self, group_id:int):
        deleted_store_level_staff = TblStoreLevelStaffNeeds.delete_store_level_staff(group_id, self.db)
        if not deleted_store_level_staff:
            return CustomResponse(status="-1", message=Messages.STORE_LEVEL_STAFF_NEEDS_NOT)
        return CustomResponse(status="1", message=Messages.STORE_LEVEL_STAFF_NEEDS_DELETE)