from fastapi import APIRouter, Depends,UploadFile
from sqlalchemy.orm import Session
from app.api.course_list.schemas import CourseFilterQuery, CourseListCreat,CourseListResponse, CourseListUpdate, FullCourseResponse
from app.api.course_list.service import CourseListService
from app.database.main.mysql import get_db
from app.dependency.authantication import JWTManager

course_list_router = APIRouter()

@course_list_router.post("/upload-courses")
async def upload_courses(file: UploadFile,db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await CourseListService(db,token).upload_courses(file)

@course_list_router.get("/full-courses",response_model=list[FullCourseResponse],response_model_exclude_none=True)
async def get_all_full_courses(db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await CourseListService(db,token).get_all_full_courses()

@course_list_router.get("/courses",response_model=list[CourseListResponse],response_model_exclude_none=True)
async def get_all_courses(db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await CourseListService(db,token).get_all_courses()

@course_list_router.get("/courses/filter",response_model=list[CourseListResponse],response_model_exclude_none=True)
async def filter_courses(filters: CourseFilterQuery = Depends(),db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await CourseListService(db,token).filter_courses(filters)

@course_list_router.post("/course", response_model_exclude_none=True)
async def create_comapany(request: CourseListCreat,db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await CourseListService(db, token).create_course(request)

@course_list_router.post("/sync/full_course_list")
def sync_full_course_list(db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return CourseListService(db,token).sync_full_course_list()

@course_list_router.put("/course/update", response_model_exclude_none=True)
async def update_course(request: CourseListUpdate,db: Session = Depends(get_db),token: dict = Depends(JWTManager.verify_token)):
    return await CourseListService(db, token).update_course(request)