from datetime import datetime
from fastapi import HTTPException
from app.api.master import schema
from app.dependency.authantication import JWTPayloadSchema
from app.models.main.master import MasterBase, TblMaster
from app.utils.schemas_utils import CustomResponse
from app.locale.messages import Messages
from sqlalchemy.orm import Session

class MasterService:
    def __init__(self, db:Session, token:JWTPayloadSchema):
        self.db = db
        self.token = token
        
    async def created(self, request:schema.MasterCreate):
        if request.master_id == 0:
            if request.is_deleted == 0:
                created_data = MasterBase.model_validate(request.model_dump())
                TblMaster.create(created_data, self.db)
            self.db.commit()
            return CustomResponse(status="1", message=Messages.MASTER)
        
        elif request.master_id != 0:
            if request.is_deleted == 0:
                update = self.db.query(TblMaster).filter(TblMaster.master_id == request.master_id).first()
                if not update:
                    raise HTTPException(status_code=404, detail="Master record not found")
                if request.category_name:
                    update.category_name = request.category_name
                    self.db.commit()
                    return CustomResponse(status="1", message=Messages.MASTER_UPDATE)

            elif request.is_deleted != 0:
                
                delete = self.db.query(TblMaster).filter(TblMaster.master_id == request.master_id).first()
                delete.is_deleted = 1
                delete.updated_at = datetime.utcnow()
            self.db.commit()
            return CustomResponse(status="1", message=Messages.MASTER_DELETE) 
            
            
    async def geted(self):
        geted_data = TblMaster.get(self.db)
        return [schema.MasterResponse.model_validate(get_data) for get_data in geted_data]