from fastapi import APIRouter, Depends

from core.security.authentication import get_user, require_role
from schema import GenericResponse
from schema.age_group import AgeGroupCreate, AgeGroupUpdate
from services.age_group import AgeGroupService

age_group_router = APIRouter(prefix="/age_group")


@age_group_router.post("/", response_model=GenericResponse, dependencies=[Depends(require_role('admin'))])
async def create_new_age_group(request: AgeGroupCreate, user=Depends(get_user), service=Depends(AgeGroupService)):
    service.save(request)
    return {"message": "Age group created successfully."}


@age_group_router.get("/", response_model=GenericResponse)
async def list_all_age_group(user=Depends(get_user), service=Depends(AgeGroupService)):
    return {"message": "Age group populated successfully.", 'data': service.fetch_all_age_group()}


@age_group_router.get("/{age_group_id}", response_model=GenericResponse)
async def get_an_age_group(age_group_id: int, user=Depends(get_user), service=Depends(AgeGroupService)):
    return {"message": "Age group populated successfully.", 'data': service.fetch_an_age_group(age_group_id)}


@age_group_router.put("/{age_group_id}", response_model=GenericResponse, dependencies=[Depends(require_role('admin'))])
async def update_age_group(age_group_id: int, request: AgeGroupUpdate, user=Depends(get_user),
                           service=Depends(AgeGroupService)):
    service.update_age_group(age_group_id, request)
    return {"message": "Age group updated successfully."}


@age_group_router.delete("/{age_group_id}", response_model=GenericResponse,
                         dependencies=[Depends(require_role('admin'))])
async def delete_age_group(age_group_id: int, user=Depends(get_user), service=Depends(AgeGroupService)):
    service.delete_age_group(age_group_id)
    return {"message": "Age group deleted successfully."}
