'use client' import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer, LineChart, Line, PieChart, Pie, Cell, } from 'recharts' interface User { id: string email: string name: string role: string profileImage?: string studentId?: string teacherId?: string } interface DashboardStats { totalStudents: number totalTeachers: number totalClasses: number totalSubjects: number } interface ChartData { enrollmentData: { name: string; students: number }[] attendanceData: { month: string present: number absent: number late: number }[] gradeData: { grade: string; count: number }[] subjectData: { name: string; teachers: number }[] } export default function DashboardPage() { const [user, setUser] = useState(null) const [stats, setStats] = useState(null) const [chartData, setChartData] = useState(null) const [isLoading, setIsLoading] = useState(true) const router = useRouter() useEffect(() => { const token = localStorage.getItem('token') if (!token) { router.push('/auth/login') return } // Parse JWT to get user info (in production, verify with server) try { const payload = JSON.parse(atob(token.split('.')[1])) setUser(payload) fetchDashboardData() } catch (error) { console.error('Invalid token:', error) localStorage.removeItem('token') router.push('/auth/login') } }, [router]) const fetchDashboardData = async () => { try { const token = localStorage.getItem('token') // Fetch stats const statsResponse = await fetch('/api/dashboard/stats', { headers: { Authorization: `Bearer ${token}`, }, }) if (statsResponse.ok) { const statsData = await statsResponse.json() setStats(statsData) } // Fetch chart data const chartsResponse = await fetch('/api/dashboard/charts', { headers: { Authorization: `Bearer ${token}`, }, }) if (chartsResponse.ok) { const chartsData = await chartsResponse.json() setChartData(chartsData) } } catch (error) { console.error('Failed to fetch dashboard data:', error) } finally { setIsLoading(false) } } const handleLogout = () => { localStorage.removeItem('token') router.push('/auth/login') } if (isLoading) { return (
) } // Statistik kehadiran Jarwo untuk dashboard admin const jarwoAttendanceWeek = [ { day: 'Senin', hadir: true }, { day: 'Selasa', hadir: false }, { day: 'Rabu', hadir: true }, { day: 'Kamis', hadir: false }, { day: 'Jumat', hadir: true }, ] const jarwoHadirCount = jarwoAttendanceWeek.filter((a) => a.hadir).length if (user?.role === 'ADMIN' && stats) { return (

Total Siswa

{stats.totalStudents}

Total Guru

{stats.totalTeachers}

Total Kelas

{stats.totalClasses}

Mata Pelajaran

{stats.totalSubjects}

{/* Statistik Kehadiran Jarwo */}

Statistik Kehadiran Siswa:{' '} Jarwo

Kehadiran Minggu Ini

Periode: Senin - Jumat

{jarwoHadirCount} Hadir {5 - jarwoHadirCount} Tidak Hadir
{jarwoAttendanceWeek.map((a, idx) => (
{a.day} {a.hadir ? ( Hadir ) : ( Tidak Hadir )}
))}

Progress Kehadiran Mingguan

{jarwoHadirCount} dari 7 hari hadir

Grafik Kehadiran Mingguan

({ day: a.day, hadir: a.hadir ? 1 : 0, }))} > value === 1 ? 'Hadir' : 'Tidak Hadir' } />
) } // Custom dashboard for student named Jarwo if (user?.role === 'STUDENT' && user?.name?.toLowerCase() === 'jarwo') { // Simulated attendance data for Jarwo const attendanceWeek = [ { day: 'Senin', hadir: true }, { day: 'Selasa', hadir: false }, { day: 'Rabu', hadir: true }, { day: 'Kamis', hadir: false }, { day: 'Jumat', hadir: true }, ] const hadirCount = attendanceWeek.filter((a) => a.hadir).length return (

Statistik Kehadiran Mingguan

Siswa: Jarwo

Kehadiran Minggu Ini

{attendanceWeek.map((a, idx) => (
{a.day} {a.hadir ? 'Hadir' : 'Tidak Hadir'}
))}

Total hadir:{' '} {hadirCount}{' '} dari 7 hari

Grafik Kehadiran

({ day: a.day, hadir: a.hadir ? 1 : 0, }))} > value === 1 ? 'Hadir' : 'Tidak Hadir' } />
) } // ...existing code... }