import type { Metadata } from 'next' import { Header } from '@/components/Header' import { getAnalyticsData } from '@/lib/analytics' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Progress } from '@/components/ui/progress' import { Badge } from '@/components/ui/badge' import { BarChart3, Clock, CheckCircle2, BookOpen, Play, TrendingUp, Bookmark, Film, Music, FileText, Image as ImageIcon, Award, } from 'lucide-react' export const metadata: Metadata = { title: 'Analytics', description: 'Learning analytics and progress overview.', } const lessonTypeIcons: Record = { VIDEO: , AUDIO: , PDF: , MARKDOWN: , HTML: , IMAGE: , OTHER: , } const lessonTypeColors: Record = { VIDEO: 'bg-red-500/20 text-red-400', AUDIO: 'bg-purple-500/20 text-purple-400', PDF: 'bg-red-500/20 text-red-400', MARKDOWN: 'bg-blue-500/20 text-blue-400', HTML: 'bg-orange-500/20 text-orange-400', IMAGE: 'bg-green-500/20 text-green-400', OTHER: 'bg-muted text-muted-foreground', } function formatDuration(seconds: number): string { const hours = Math.floor(seconds / 3600) const minutes = Math.floor((seconds % 3600) / 60) if (hours > 0) { return `${hours}h ${minutes}m` } return `${minutes}m` } export const dynamic = 'force-dynamic' export default async function AnalyticsPage() { const data = await getAnalyticsData() const totalWatchedHours = Math.floor(data.totalWatchedMinutes / 60) const remainingMinutes = data.totalWatchedMinutes % 60 return (

Learning Analytics

Your personal learning insights and progress overview.

{/* Overview Cards */}
Total Courses

{data.totalCourses}

{data.completedCourses} completed · {data.inProgressCourses} in progress

0 ? Math.round((data.completedCourses / data.totalCourses) * 100) : 0} className="h-1.5 mt-2 gradient-progress" />
Lessons Completed

{data.completedLessons}

{data.lessonCompletionRate}% completion rate

Total Time Watched

{totalWatchedHours}h {remainingMinutes}m

{data.totalWatchedMinutes} minutes total

This Week

{data.weeklyWatchedHours}h

{data.weeklyCompletedLessons} lessons completed

{/* Detailed Breakdown */}
{/* Lessons by Type */} Lessons by Type {data.lessonsByType.map(({ type, _count }) => { const completed = data.completedByType[type] || 0 const percentage = _count > 0 ? Math.round((completed / _count) * 100) : 0 const Icon = lessonTypeIcons[type] || lessonTypeIcons.OTHER return (
{Icon}

{type.toLowerCase()}

{completed} / {_count} completed

{percentage}%
) })}
{/* Course Progress Distribution */} Course Progress Distribution
Completed {data.completedCourses}
0 ? Math.round((data.completedCourses / data.totalCourses) * 100) : 0} className="h-2.5 gradient-progress" />
In Progress {data.inProgressCourses}
0 ? Math.round((data.inProgressCourses / data.totalCourses) * 100) : 0} className="h-2.5 gradient-progress-accent" />
Not Started {data.totalCourses - data.completedCourses - data.inProgressCourses}
0 ? Math.round(((data.totalCourses - data.completedCourses - data.inProgressCourses) / data.totalCourses) * 100) : 0} className="h-2.5" />
Lesson Completion {data.lessonCompletionRate}%
{/* Time Stats */}
Total Watch Time
Hours watched {totalWatchedHours}h {remainingMinutes}m
Minutes total {data.totalWatchedMinutes} min
Average per lesson {data.completedLessons > 0 ? `${Math.round(data.totalWatchedMinutes / data.completedLessons)} min` : '—'}
This Week Activity
Hours watched {data.weeklyWatchedHours}h
Minutes {data.weeklyWatchedMinutes} min
Lessons completed {data.weeklyCompletedLessons}
Lesson Status
Completed {data.completedLessons}
In Progress {data.inProgressLessons}
Not Started {data.notStartedLessons}
Total {data.totalLessons}
) }