from fastapi import Depends, APIRouter

from core.security.authentication import require_role, get_user
from schema import GenericResponse
from schema.academic_year import AcademicYearCreateSchema, AcademicYearUpdateSchema
from services.academic_year import AcademicYearService

academic_year_router = APIRouter(prefix="/academic_year")


@academic_year_router.post("/", dependencies=[Depends(require_role('admin'))], response_model=GenericResponse)
async def create_academic_year(request: AcademicYearCreateSchema, user=Depends(get_user),
                               service=Depends(AcademicYearService)):
    service.save(request)
    return {"message": "Academic year created successfully."}


@academic_year_router.get("/", response_model=GenericResponse)
async def list_all_academic_year(user=Depends(get_user), service=Depends(AcademicYearService)):
    return {"message": "Academic year populated successfully.", 'data': service.fetch_all_academic_year()}


@academic_year_router.get("/{academic_year_id}", response_model=GenericResponse)
async def academic_year_detail(academic_year_id: int, user=Depends(get_user), service=Depends(AcademicYearService)):
    return {"message": "Academic year populated successfully.", 'data': service.academic_year_detail(academic_year_id)}


@academic_year_router.put("/{academic_year_id}", response_model=GenericResponse,
                          dependencies=[Depends(require_role('admin'))])
async def update_academic_year(academic_year_id: int, request: AcademicYearUpdateSchema, user=Depends(get_user),
                               service=Depends(AcademicYearService)):
    service.update_academic_year(academic_year_id, request)
    return {"message": "Academic year updated successfully."}


@academic_year_router.delete("/{academic_year_id}", response_model=GenericResponse,
                             dependencies=[Depends(require_role('admin'))])
async def delete_academic_year(academic_year_id: int, user=Depends(get_user), service=Depends(AcademicYearService)):
    service.delete_academic_year(academic_year_id)
    return {"message": "Academic year deleted successfully."}
