from fastapi import APIRouter, Depends

from core.security.authentication import get_user, require_role
from schema import GenericResponse
from schema.staff import StaffCreateSchema, StaffUpdateSchema
from services.staff import StaffService

staff_router = APIRouter(prefix="/staff")


@staff_router.post("/", response_model=GenericResponse, dependencies=[Depends(require_role('admin'))])
async def resolve_create_staff(request: StaffCreateSchema, user=Depends(get_user),
                               service: StaffService = Depends(StaffService)):
    service.create_new_staff(request)
    return {"message": "Staff added successfully."}


@staff_router.get("/", response_model=GenericResponse)
async def resolve_list_staff(user=Depends(get_user), service=Depends(StaffService)):
    return {"message": "Staff populated successfully.", 'data': service.fetch_all_staffs()}


@staff_router.get("/{staff_id}", response_model=GenericResponse)
async def staff_details(staff_id: int, user=Depends(get_user), service=Depends(StaffService)):
    return {"message": "Staff populated successfully.", 'data': service.fetch_staff_detail(staff_id)}


@staff_router.put("/{staff_id}", response_model=GenericResponse)
async def update_staff(staff_id: int, request: StaffUpdateSchema, user=Depends(get_user),
                       service=Depends(StaffService)):
    service.update_staff(staff_id, request)
    return {"message": "Staff updated successfully."}


@staff_router.delete("/{staff_id}", response_model=GenericResponse)
async def delete_staff(staff_id: int, user=Depends(get_user), service=Depends(StaffService)):
    service.delete_staff(staff_id)
    return {"message": "Staff deleted successfully."}
