import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { BookOpen, ClipboardList, BarChart3, Calendar, ArrowRight, Play } from "lucide-react"; import { Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; import { useMyEnrolledCourses, useGrades } from "@/hooks/queries"; import { useAuth } from "@/contexts/AuthContext"; import AiStudyCoach from "@/components/ai/AiStudyCoach"; import AiTipBanner from "@/components/ai/AiTipBanner"; export default function StudentDashboard() { const { user } = useAuth(); const { t } = useTranslation(); const { data: enrolledData, isLoading: lc } = useMyEnrolledCourses(); const { data: gradesData, isLoading: lg } = useGrades(); const myCourses = enrolledData?.items ?? []; const gradeRecords = gradesData ?? []; if (lc || lg) return
; const recentGrades = gradeRecords.slice(0, 3); const avgProgress = myCourses.length > 0 ? Math.round(myCourses.reduce((s, c) => s + c.progress, 0) / myCourses.length) : 0; const avgGrade = gradeRecords.length > 0 ? Math.round(gradeRecords.reduce((s, g) => s + (g.grade / g.max_grade) * 100, 0) / gradeRecords.length) : 0; const firstName = user?.name?.split(" ")[0] || t("dashboard.greetingFallback"); const stats = [ { label: t("studentDash.enrolledCourses"), value: String(myCourses.length), icon: BookOpen, color: "text-primary" }, { label: t("studentDash.overallProgress"), value: `${avgProgress}%`, icon: ClipboardList, color: "text-warning" }, { label: t("studentDash.averageGrade"), value: gradeRecords.length > 0 ? `${avgGrade}%` : "N/A", icon: BarChart3, color: "text-success" }, { label: t("studentDash.totalChapters"), value: String(myCourses.reduce((s, c) => s + c.chapter_count, 0)), icon: Calendar, color: "text-info" }, ]; return (

{t("studentDash.welcome", { name: firstName })}

{t("studentDash.subtitle")}

{stats.map((s) => (

{s.label}

{s.value}

))}
{t("studentDash.myCourses")} {myCourses.length === 0 ? (

{t("studentDash.noEnrolledCourses")}

) : myCourses.map((c) => (

{c.title || c.name}

{t("studentDash.chaptersMaterials", { chapters: c.chapter_count, materials: c.total_materials })}

{c.progress}%
))}
{t("studentDash.quickActions")} {myCourses.slice(0, 3).map(c => (

{c.progress > 0 ? t("studentDash.continue") : t("studentDash.start")} {c.title || c.name}

{t("studentDash.chaptersDone", { done: c.completed_chapters, total: c.chapter_count })}

{c.progress}% ))} {myCourses.length === 0 && (

{t("studentDash.enrollToStart")}

)}
{t("studentDash.recentGrades")} {recentGrades.length === 0 ? (

{t("studentDash.noGradesYet")}

) : recentGrades.map((g) => (

{g.assignment_title}

{g.course_name}

{g.grade}/{g.max_grade}
))}
); }