from typing import List
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.api.group import service
from app.api.student.schemas import GroupResponse
from app.database.main.mysql import get_db
from app.models.main.category import CategoryCreate
from .schemas import GetSimulationGroup, GroupCreate, GroupRespose , GroupUpdate, StudentInfo, GroupCategoryResponse
from app.dependency.authantication import get_current_user, JWTPayloadSchema
from app.api.group.schemas import MainDataSchema

group_router = APIRouter()

@group_router.post("/group", response_model_exclude_none=True)
async def create_group(request: GroupCreate,db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.GroupService(db, token).create_group(request)

@group_router.get("/group/{group_id}", response_model=GroupRespose, response_model_exclude_none=True)
async def get_simulation(group_id: int, db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.GroupService(db, token).get_group(group_id)

@group_router.get("/category/{group_id}", response_model=GroupCategoryResponse, response_model_exclude_none=True)
async def get_simulation1(group_id: int, db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.GroupService(db, token).get_group_category(group_id)

@group_router.get("/get_simulation_group/{group_code}", response_model_exclude_none=True)
async def get_simulation_group(group_code: str, db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.GroupService(db, token).get_simulation_group(group_code)

@group_router.put("/group/update", response_model=GroupResponse, response_model_exclude_none=True)
async def update_segment(request: List[GroupUpdate],db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.GroupService(db, token).update_group(request)

@group_router.get("/group/{group_id}/students", response_model=List[StudentInfo], response_model_exclude_none=True)
async def get_group_students(group_code: str, db: Session = Depends(get_db), token: JWTPayloadSchema = Depends(get_current_user)):
    return await service.GroupService(db, token).get_group_students(group_code)

@group_router.post("/category", tags=["Category"])
def assign_category(request: CategoryCreate, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return service.GroupService(db,token).create_category(request)

@group_router.get("/groupbased/{group_id}/main-data", response_model=MainDataSchema)
def get_main_data_by_group(group_id: int, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return service.GroupService(db, token).get_main_data_by_group_service(group_id)

@group_router.get("/group/category/{group_id}", response_model=GroupCategoryResponse, tags=["Category"])
def get_group_category(group_id: int, db: Session = Depends(get_db),token: JWTPayloadSchema = Depends(get_current_user)):
    return service.GroupService(db,token).get_group_category_service(group_id)

# @group_router.get("/group/{group_id}/category", response_model=GroupCategoryResponse)
# def get_group_category(group_id: int, db: Session = Depends(get_db)):
#     group = db.query(TblGroup).filter(TblGroup.group_id == group_id).first()
#     if not group:
#         raise HTTPException(status_code=404, detail="Group not found")
    
#     return GroupCategoryResponse(
#         category_assigned=group.category_assigned,
#         category=group.category
#     )



