"""Simulation router."""
from datetime import datetime
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, SuperAdminSimulation
from app.api.simulation import schemas

simulation_router = APIRouter()

@simulation_router.post("/superadmin/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=schemas.SimulationResponse, response_model_exclude_none=True)
async def 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_code}/groups",response_model_exclude_none=True)
async def get_groups_by_simulation_code(simulation_code: str,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.SimulationService(db,token).get_groups_by_simulation_code(simulation_code)

@simulation_router.put("/update_end_date", response_model_exclude_none=True)
async def update_end_date(simulation_id:int, end_date:datetime, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.SimulationService(db,token).update_end_date(simulation_id,end_date)

@simulation_router.put("run_simulation", response_model_exclude_none=True)
async def run_simulation(simulation_id:int, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.SimulationService(db,token).run_simulation(simulation_id)

@simulation_router.put("end_simulation", response_model_exclude_none=True)
async def end_simulation(simulation_id:int, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.SimulationService(db,token).end_simulation(simulation_id)

# @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)

# @simulation_router.post("/create_institutions", response_model_exclude_none=True)
# async def create_institutions(request:schemas.InstitutionsCreate, db:Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
#     return await service.SimulationService(db,token).create_institutions(request)


