"""Simulation router."""
from typing import List
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.api.simulation import service
from app.api.student.schemas import GroupResponse
from app.database.main.mysql import get_db
from app.dependency.authantication import JWTPayloadSchema, get_current_user
from .schemas import SimulationCreate, SimulationResponse

simulation_router = APIRouter()

@simulation_router.post("/simulation", response_model_exclude_none=True)
async def create_simulation(request: SimulationCreate,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    """Register the simulation."""
    return await service.SimulationService(db, token).create_simulation(request)

@simulation_router.get("/simulation/{simulation_id}", response_model=SimulationResponse, response_model_exclude_none=True)
async def get_simulation(simulation_id: int, db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.SimulationService(db, token).get_simulation(simulation_id)

@simulation_router.get("/simulation/{simulation_id}/groups",response_model=List[GroupResponse],response_model_exclude_none=True)
async def get_groups_by_simulation_id(simulation_code: str,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return service.SimulationService(db,token).get_groups_by_simulation_id(simulation_code)

# @simulation_router.get("/simulation/{simulation_id}/groups")
# async def get_groups_by_simulation_id(simulation_code: str, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
#     return service.SimulationService(db,token).get_groups_by_simulation_id(simulation_code)

@simulation_router.delete("/simulation/delete/{simulation_id}",response_model_exclude_none=True)
async def delete_simulation(simulation_id: int,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.SimulationService(db, token).delete_simulation(simulation_id)


