from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session

from app.database import get_db
from app.dependencies import require_user_token
from app.models import User
from app.schemas import MemberSessionProgressListResponse, UserDashboardResponse
from app.services.admin_service import (
    list_member_session_progress,
    serialize_member_session_progress,
)
from app.services.user_dashboard_service import get_user_dashboard

router = APIRouter(tags=["user-progress"])


@router.get(
    "/my-session-progress",
    response_model=MemberSessionProgressListResponse,
    summary="List assigned points and feedback for the logged-in user",
)
def my_progress(
    feedback_only: bool = Query(False, description="Return only rows that include admin feedback"),
    db: Session = Depends(get_db),
    user: User = Depends(require_user_token),
):
    rows = list_member_session_progress(db, user.id, feedback_only=feedback_only)
    return MemberSessionProgressListResponse(
        total=len(rows),
        progress=[serialize_member_session_progress(row) for row in rows],
    )


@router.get(
    "/dashboard",
    response_model=UserDashboardResponse,
    summary="Get home/dashboard progress cards for the logged-in user",
)
def user_dashboard(
    db: Session = Depends(get_db),
    user: User = Depends(require_user_token),
):
    return get_user_dashboard(db, user)
