from typing import List, Optional
from fastapi import APIRouter, Depends
from sqlmodel import Session

from app.core.db import get_session
from app.models.models import User
from app.api import deps
from app.schemas.study_plan import (
    StudyPlanItemResponse,
    StudyPlanAddRequest,
    StudyPlanBulkRequest,
    StudyPlanItemStatusUpdate
)
from app.schemas.quiz import QuizStartResponse
from app.services import study_plan_service

router = APIRouter()


@router.get("/study-plan", response_model=List[StudyPlanItemResponse])
def get_study_plan(
    topic_id: Optional[str] = None,
    current_user: User = Depends(deps.get_current_active_user),
    session: Session = Depends(get_session),
):
    return study_plan_service.get_study_plan(session, current_user.id, topic_id)


@router.post("/study-plan", response_model=StudyPlanItemResponse, status_code=201)
def add_to_study_plan(
    payload: StudyPlanAddRequest,
    current_user: User = Depends(deps.get_current_active_user),
    session: Session = Depends(get_session),
):
    return study_plan_service.add_to_study_plan(session, current_user.id, payload.question_id)


@router.post("/study-plan/bulk", status_code=201)
def bulk_add_to_study_plan(
    payload: StudyPlanBulkRequest,
    current_user: User = Depends(deps.get_current_active_user),
    session: Session = Depends(get_session),
):
    return study_plan_service.bulk_add_to_study_plan(
        session, current_user.id, payload.question_ids, payload.topic_id
    )


@router.delete("/study-plan/{item_id}", status_code=204)
def remove_from_study_plan(
    item_id: int,
    current_user: User = Depends(deps.get_current_active_user),
    session: Session = Depends(get_session),
):
    study_plan_service.remove_from_study_plan(session, current_user.id, item_id)


@router.get("/study-plan/start", response_model=QuizStartResponse)
def start_study_plan_quiz(
    topic_id: Optional[str] = None,
    current_user: User = Depends(deps.get_current_active_user),
    session: Session = Depends(get_session),
):
    return study_plan_service.start_study_quiz(session, current_user.id, topic_id)

@router.patch("/study-plan/{item_id}/status")
def update_item_status(
    item_id: int,
    payload: StudyPlanItemStatusUpdate,
    current_user: User = Depends(deps.get_current_active_user),
    session: Session = Depends(get_session),
):
    return study_plan_service.update_item_status(
        session, current_user.id, item_id, payload.status
    )
