from typing import Annotated

from fastapi import APIRouter, Depends, Form

from core.security.authentication import get_user
from schema import GenericResponse
from schema.course_category import CourseCategoryCreate, CourseCategoryUpdateSchema
from services.course_category import CourseCategoryService

course_category_router = APIRouter(prefix="/course_category")


@course_category_router.post("/", response_model=GenericResponse)
async def create_course_category(request: Annotated[CourseCategoryCreate, Form()], user=Depends(get_user),
                                 service=Depends(CourseCategoryService)):
    await service.create_course_category(request)
    return {"message": "Course Category created successfully."}


@course_category_router.get("/", response_model=GenericResponse)
async def list_all_course_category(user=Depends(get_user), service=Depends(CourseCategoryService)):
    return {"message": "Course category populated successfully.", 'data': service.fetch_all_course_category()}


@course_category_router.get("/{course_category_id}", response_model=GenericResponse)
async def course_category_details(course_category_id: int, user=Depends(get_user),
                                  service=Depends(CourseCategoryService)):
    return {"message": "Course category populated successfully.",
            'data': service.fetch_course_category_details(course_category_id)}


@course_category_router.put("/{course_category_id}", response_model=GenericResponse)
async def update_course_category(course_category_id: int, request: Annotated[CourseCategoryUpdateSchema, Form()],
                                 user=Depends(get_user),
                                 service=Depends(CourseCategoryService)):
    await service.update_course_category(course_category_id, request)
    return {"message": "Course category  updated successfully."}


@course_category_router.delete("/{course_category_id}", response_model=GenericResponse)
async def delete_course_category(course_category_id: int, user=Depends(get_user),
                                 service=Depends(CourseCategoryService)):
    service.delete_course_category(course_category_id)
    return {"message": "Course category deleted successfully."}
