from app.api.operating_expenses import schema
from app.models.main.operating_expenses import OperatingExpensesBase, TblOperatingExpenses
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 OperatingExpensesService:
    def __init__(self, db:Session, token:JWTPayloadSchema):
        self.db = db
        self.token = token
    
    async def create_operating_Expenses(self, request:schema.OperatingExpensesCreate):
        created_operating_Expenses = OperatingExpensesBase.model_validate(request.model_dump())
        TblOperatingExpenses.create_operating_expenses(created_operating_Expenses, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.OPERATING_EXPENSES)
    
    async def get_operating_Expenses(self, group_id:int):
        new_get_operating_Expenses = TblOperatingExpenses.get_operating_expenses(group_id, self.db)
        if not new_get_operating_Expenses:
            raise HTTPException(status_code=404, detail="Get groupID not found")
        return [schema.OperatingExpensesResponse.model_validate(get_group) for get_group in new_get_operating_Expenses]
    
    async def update_operating_expenses(self, request:schema.OperatingExpensesUpdate):
        updated_operating_expenses = OperatingExpensesBase.model_validate(request.model_dump())
        if updated_operating_expenses.operating_id is None:
            return CustomResponse(status="-1", message=Messages.OPERATING_EXPENSES_NOT)
        TblOperatingExpenses.update_operating_expenses(updated_operating_expenses.operating_id, updated_operating_expenses, self.db)
        return CustomResponse(status="1", message=Messages.OPERATING_EXPENSES_UPDATE)
    
    async def delete_operating_expenses(self, group_id:int):
        deleted_operating_expenses = TblOperatingExpenses.delete_operatin_expenses(group_id, self.db)
        if not deleted_operating_expenses:
            return CustomResponse(status="-1", message=Messages.OPERATING_EXPENSES_NOT)
        return CustomResponse(status="1", message=Messages.OPERATING_EXPENSES_DELETE)
    