from fastapi import Depends, APIRouter
from core.security.authentication import require_role, get_user
from schema import GenericResponse
from schema.waiting_list import WaitingListBase, WaitingListCreateSchema
from services.waiting_list import WaitingListService
from schema.waiting_list import WaitingListUpdateSchema,WaitingListFilterSchema

waiting_list_router = APIRouter(prefix="/waiting_list")


@waiting_list_router.post("/",  response_model=GenericResponse)
async def create_waiting_list(request: WaitingListCreateSchema, user=Depends(get_user), service=Depends(WaitingListService)):
    service.save(request,user)
    return {"message": "Waiting List created successfully."}


@waiting_list_router.get("/{waiting_list_id}", response_model=GenericResponse)
async def waiting_list_detail(waiting_list_id: int, user=Depends(get_user), service=Depends(WaitingListService)):
    return {"message": "Waiting list populated successfully.", 'data': service.waiting_list_detail(waiting_list_id)}

@waiting_list_router.delete("/{waiting_list_id}", response_model=GenericResponse)
async def delete_waiting_list(waiting_list_id: int, user=Depends(get_user), service=Depends(WaitingListService)):
    service.delete_waiting_list(waiting_list_id)
    return {"message": "Waiting list deleted successfully."}


@waiting_list_router.patch("/{waiting_list_id}", response_model=GenericResponse)
async def update_waiting_list(
    waiting_list_id: int, 
    request: WaitingListUpdateSchema, 
    user=Depends(get_user), 
    service=Depends(WaitingListService)
):
    service.update_waiting_list(waiting_list_id, request)
    return {"message": "Waiting list updated successfully."}


@waiting_list_router.post("/filter", response_model=GenericResponse)
async def filter_waiting_list(
    filters: WaitingListFilterSchema,
    user=Depends(get_user),
    service=Depends(WaitingListService)
):
    return {
        "message": "Filtered waiting list populated successfully.",
        'data': service.fetch_filtered_waiting_list(filters)
    }


