"use client" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Check, X, ShieldAlert } from "lucide-react" import { useEffect, useState } from "react" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { getApiUrl } from "@/lib/api-config" interface PendingNickname { id: number performance_id: number nickname: string suggested_by: number created_at: string } export default function ModDashboardPage() { const [pendingNicknames, setPendingNicknames] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState("") useEffect(() => { fetchQueue() }, []) const fetchQueue = async () => { const token = localStorage.getItem("token") if (!token) { setError("Not authenticated") setLoading(false) return } try { const res = await fetch(`${getApiUrl()}/moderation/queue/nicknames`, { headers: { Authorization: `Bearer ${token}` } }) if (res.status === 403) { setError("Access denied: Moderators only") setLoading(false) return } if (!res.ok) throw new Error("Failed to fetch queue") const data = await res.json() setPendingNicknames(data) } catch (err) { console.error(err) setError("Failed to load moderation queue") } finally { setLoading(false) } } const handleAction = async (id: number, action: "approve" | "reject") => { const token = localStorage.getItem("token") if (!token) return try { const res = await fetch(`${getApiUrl()}/moderation/nicknames/${id}/${action}`, { method: "POST", headers: { Authorization: `Bearer ${token}` } }) if (!res.ok) throw new Error(`Failed to ${action}`) // Remove from list setPendingNicknames(prev => prev.filter(n => n.id !== id)) } catch (err) { console.error(err) alert(`Error: ${err}`) } } if (loading) return
Loading dashboard...
if (error) return
{error}
return (

Moderator Dashboard

Nicknames ({pendingNicknames.length}) Reports (0) Pending Nicknames {pendingNicknames.length === 0 ? (

No pending nicknames. Good job!

) : (
{pendingNicknames.map((item) => (

"{item.nickname}"

Performance #{item.performance_id} • User #{item.suggested_by}

{new Date(item.created_at).toLocaleDateString()}

))}
)}
User Reports

Report queue coming soon...

) }