from typing import List
from fastapi import HTTPException
from sqlalchemy.orm import Session
from app.api.commercial_equipment import schemas
from app.models.main.commercial_equipment import CommercialEquipmentBase, TblCommercialEquipment
from app.api.commercial_equipment.schemas import CommercialEquipmentCreate, CommercialEquipmentResponse
from app.dependency.authantication import JWTPayloadSchema
from app.utils.schemas_utils import CustomResponse
from app.locale.messages import Messages

class CommercialEquipmentService:
    def __init__(self, db: Session, token: JWTPayloadSchema):
        self.db = db
        self.token = token

    # async def create_commercial_equipment(self, request: CommercialEquipmentCreate):
    #     data = prepare_equipment_data(request)
    #     created_equipment = FurnitureEstimateBase.model_validate(data) 
    #     TblCommercialEquipment.create(created_equipment, self.db)
    #     self.db.commit()
    #     return CustomResponse(status="1", message="Commercial Equipment item created successfully.")

    async def create_commercial_equipment(self, request: CommercialEquipmentCreate):
        total=request.cost_per_unit*request.cost_per_unit
        created_equipment = CommercialEquipmentResponse.model_validate(request)
        created_equipment.total=total
        new_equipment = TblCommercialEquipment.create(CommercialEquipmentBase.model_validate(created_equipment.model_dump()),self.db)
        self.db.add(new_equipment)
        self.db.commit()
        self.db.refresh(new_equipment)
        return CustomResponse(status="1", message="Commercial Equipment item created successfully.")
    
    async def get_commercial_equipment(self, group_id: int):
        commercial_equipment = TblCommercialEquipment.get_by_id(group_id, self.db)
        if not commercial_equipment:
            raise HTTPException(status_code=404,detail="comercial equipment not found")
        return [CommercialEquipmentResponse.model_validate(get_group) for get_group in commercial_equipment]
    
    async def updated(self, request:List[schemas.CommercialEquipmentUpdate]):
        for req in request:
            total=req.cost_per_unit*req.cost_per_unit
            updated_data = CommercialEquipmentBase.model_validate(req.model_dump())
            updated_data.total=total
            if updated_data.equipment_id is None:
                return CustomResponse(status="-1", message=Messages.COMMERCIAL_EQUIPMENT_NOT)
            TblCommercialEquipment.update(updated_data.equipment_id, updated_data, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.COMMERCIAL_EQUIPMENT_UPDATE)
    
    async def deleted(self, equipment_id:int):
        deleted_data = TblCommercialEquipment.delete(equipment_id, self.db)
        if not deleted_data:
            return CustomResponse(status="-1", message=Messages.COMMERCIAL_EQUIPMENT_NOT)
        return CustomResponse(status="1", message=Messages.COMMERCIAL_EQUIPMENT_DELETE)

