from app.api.corporate_concept_office import schema
from app.models.main.corporate_concept_office import CorporateConceptOfficeBase, TblCorporateConceptOffice
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 CorporateConceptOfficeService:
    def __init__(self, db:Session, token:JWTPayloadSchema):
        self.db = db
        self.token = token
        
    async def create_corporate_concept_office(self, request:schema.CorporateConceptOfficeCreate):
        created_corporate_concept_office = CorporateConceptOfficeBase.model_validate(request.model_dump())
        TblCorporateConceptOffice.create_corporate_concept_office(created_corporate_concept_office, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.CORPORATE_CONCEPT_OFFICE)
    
    async def get_corporate_concept_office(self, group_id:int):
        new_get_corporate_concept_office = TblCorporateConceptOffice.get_corporate_concept_office(group_id, self.db)
        if not new_get_corporate_concept_office:
            raise HTTPException(status_code=404, detail="Get group ID not found")
        return [schema.CorporateConceptOfficeResponse.model_validate(get_group) for get_group in new_get_corporate_concept_office]
    
    async def update_corporate_concept_office(self, request:schema.CorporateConceptOfficeUpdate):
        updated_corporate_concept_office = CorporateConceptOfficeBase.model_validate(request.model_dump())
        if updated_corporate_concept_office.corporate_id is None:
            return CustomResponse(status="-1", message=Messages.CORPORATE_CONCEPT_OFFICE_NOT)
        TblCorporateConceptOffice.update_corporate_concept_office(updated_corporate_concept_office.corporate_id, updated_corporate_concept_office, self.db)
        return CustomResponse(status="1", message=Messages.CORPORATE_CONCEPT_OFFICE_UPDATE)
    
    async def delete_corporate_concept_office(self, group_id:int):
        deleted_corporate_concept_office = TblCorporateConceptOffice.delete_corporate_concept_office(group_id, self.db)
        if not deleted_corporate_concept_office:
            return CustomResponse(status="-1", message=Messages.CORPORATE_CONCEPT_OFFICE_NOT)
        return CustomResponse(status="1", message=Messages.CORPORATE_CONCEPT_OFFICE_DELTE)