from fastapi import Depends, APIRouter

from core.security.authentication import require_role, get_user
from schema import GenericResponse
from schema.term import TermCreateSchema, TermUpdateSchema
from services.term import TermService

term_router = APIRouter(prefix="/term")


@term_router.post("/", dependencies=[Depends(require_role('admin'))], response_model=GenericResponse)
async def create_term(request: TermCreateSchema, user=Depends(get_user), service=Depends(TermService)):
    service.save(request)
    return {"message": "Term created successfully."}


@term_router.get("/", response_model=GenericResponse)
async def list_all_term(user=Depends(get_user), service=Depends(TermService)):
    return {"message": "Term populated successfully.", 'data': service.fetch_all_term()}


@term_router.get("/{term_id}", response_model=GenericResponse)
async def term_detail(term_id: int, user=Depends(get_user), service=Depends(TermService)):
    return {"message": "Term populated successfully.", 'data': service.term_detail(term_id)}


@term_router.put("/{term_id}", response_model=GenericResponse, dependencies=[Depends(require_role('admin'))])
async def update_term(term_id: int, request: TermUpdateSchema, user=Depends(get_user), service=Depends(TermService)):
    service.update_term(term_id, request)
    return {"message": "Term updated successfully."}


@term_router.delete("/{term_id}", response_model=GenericResponse, dependencies=[Depends(require_role('admin'))])
async def delete_term(term_id: int, user=Depends(get_user), service=Depends(TermService)):
    service.delete_term(term_id)
    return {"message": "Term deleted successfully."}
