from fastapi import APIRouter, Depends

from core.security.authentication import get_user
from schema import GenericResponse
from schema.role import RoleCreateSchema, RoleResponseSchema, RoleListResponseSchema, RoleUpdateRequest
from services.role import RoleService

role_router = APIRouter(prefix="/roles")


@role_router.post("/", response_model=GenericResponse)
async def create_role(request: RoleCreateSchema, user=Depends(get_user), service=Depends(RoleService)):
    service.create(request)
    return {"message": "Role added"}


@role_router.get("/", response_model=RoleListResponseSchema)
async def list_all_roles(user=Depends(get_user), service=Depends(RoleService)):
    return {"data": service.list_all_roles()}


@role_router.get("/{role_id}", response_model=RoleResponseSchema, )
async def get_role_details(role_id, user=Depends(get_user), service=Depends(RoleService)):
    return {"data": service.get_by_id(role_id)}


@role_router.delete("/{role_id}", status_code=204)
async def delete_role(role_id, user=Depends(get_user), service=Depends(RoleService)):
    service.delete_role(role_id)


@role_router.put("/{role_id}", response_model=GenericResponse, )
async def updated_role(role_id: int, request: RoleUpdateRequest, user=Depends(get_user), service=Depends(RoleService)):
    service.update_role(role_id, request)
    return {}
