"use client"; import { useEffect, useState } from "react"; import axios from "axios"; import { Zap, Check, X, Info, Activity } from "lucide-react"; export default function AdminDashboard() { const [pendingBookings, setPendingBookings] = useState([]); const [roomStats, setRoomStats] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchAdminData(); // Refresh data konsumsi daya setiap 10 detik agar terlihat real-time const interval = setInterval(fetchAdminData, 10000); return () => clearInterval(interval); }, []); const fetchAdminData = async () => { try { const token = localStorage.getItem("token"); // 1. Ambil SEMUA booking pakai endpoint yang sudah ada, lalu filter di Frontend const bookRes = await axios.get("http://localhost:8080/api/bookings", { headers: { Authorization: `Bearer ${token}` } }); const allBookings = bookRes.data.data || []; // Saring hanya yang statusnya "Pending" atau kosong const pendingOnly = allBookings.filter((b: any) => b.status === "Pending" || !b.status); setPendingBookings(pendingOnly); // 2. Ambil daftar ruangan biasa, lalu kita sisipkan "Dummy Power" untuk UI const roomRes = await axios.get("http://localhost:8080/api/rooms", { headers: { Authorization: `Bearer ${token}` } }); const roomsWithDummyPower = (roomRes.data.data || []).map((room: any) => ({ ...room, // Simulasi daya acak antara 0 sampai 15 Watt untuk keperluan UI power_consumption: Math.floor(Math.random() * 15) })); setRoomStats(roomsWithDummyPower); } catch (err) { console.error("Gagal ambil data admin", err); } finally { setLoading(false); } }; const handleAction = async (id: number, status: string) => { try { const token = localStorage.getItem("token"); // Mengirim status 'Approved' atau 'Rejected' ke backend await axios.put(`http://localhost:8080/api/bookings/${id}/status`, { status: status }, { headers: { Authorization: `Bearer ${token}` } } ); alert(`Permintaan berhasil di-${status}`); fetchAdminData(); // Refresh data setelah aksi } catch (err) { alert("Gagal memproses pendaftaran."); } }; if (loading) return
Memasuki Mode Admin...
; return (
{/* SECTION 1: POWER MONITORING CARDS */}

Real-time Room Energy

{roomStats.map((room) => (
{room.name}
5 ? 'bg-orange-500 animate-pulse' : 'bg-gray-300'}`} />
{room.power_consumption || 0} Watts

Last updated: Just now

))}
{/* SECTION 2: APPROVAL TABLE */}

Pending Approvals

{pendingBookings.length} Requests
{pendingBookings.map((b) => ( ))} {pendingBookings.length === 0 && ( )}
Peminjam Ruangan Waktu Keperluan Tindakan
{b.user?.full_name} {b.room?.name} {new Date(b.start_time).toLocaleString('id-ID')} {b.purpose}
Tidak ada permintaan menunggu.
); }