from sqlalchemy.orm import Session
import app.api.simulation.schemas as schemas
from app.dependency.authantication import JWTPayloadSchema
from app.locale.messages import Messages
from app.models.main.group import TblGroup
from app.models.main.simulation import SimulationBase, TblSimulation
from app.utils.schemas_utils import CustomResponse

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

    async def create_simulation(self, request: schemas.SimulationCreate):
        created_user = SimulationBase.model_validate(request.model_dump())
        TblSimulation.create(created_user, self.db)
        self.db.commit()
        return CustomResponse(status="1", message=Messages.SIMULATION_CREAT)
    
    async def get_simulation(self,  simulation_id: int):
        simulation = TblSimulation.get_by_id(simulation_id, self.db)
        return schemas.SimulationResponse.model_validate(simulation)
    
    def get_groups_by_simulation_id(self, simulation_code: str):
        return self.db.query(TblGroup).filter(TblGroup.simulation_code == simulation_code).all()

    # def get_groups_by_simulation_id(self, simulation_id: int):
    #     simulation = self.db.query(TblSimulation).filter_by(simulation_code=simulation_id).first()
    #     if not simulation:
    #         return []

        # return self.db.query(TblGroup).filter_by(simulation_code=simulation.simulation_code).all()

    
    async def delete_simulation(self, simulation_id: int):
        deleted = TblSimulation.delete(simulation_id, self.db)
        if not deleted:
            return CustomResponse(status="-1", message=Messages.SIMULATION_NOT_FOUND)
        return CustomResponse(status="1", message=Messages.SIMULATION_DELETED)
