"use client" import { useEffect, useState } from "react" import { getApiUrl } from "@/lib/api-config" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Check, X, Clock, ExternalLink } from "lucide-react" import Link from "next/link" interface Nickname { id: number nickname: string description: string performance_id: number status: string song_title?: string song_slug?: string show_date?: string suggested_by_username?: string } export function NicknameQueue() { const [nicknames, setNicknames] = useState([]) const [loading, setLoading] = useState(true) const [activeTab, setActiveTab] = useState("pending") const fetchQueue = (status: string = "pending") => { const token = localStorage.getItem("token") if (!token) return setLoading(true) fetch(`${getApiUrl()}/moderation/queue/nicknames?status=${status}`, { headers: { Authorization: `Bearer ${token}` } }) .then(res => res.json()) .then(data => setNicknames(Array.isArray(data) ? data : [])) .catch(console.error) .finally(() => setLoading(false)) } useEffect(() => { fetchQueue(activeTab) }, [activeTab]) const moderate = (id: number, action: "approve" | "reject") => { const token = localStorage.getItem("token") if (!token) return fetch(`${getApiUrl()}/moderation/nicknames/${id}/${action}`, { method: "PUT", headers: { Authorization: `Bearer ${token}` } }).then(() => { setNicknames(prev => prev.filter(n => n.id !== id)) }) } const getStatusBadge = (status: string) => { switch (status) { case "approved": return Approved case "rejected": return Rejected default: return Pending } } const renderNicknameCard = (nick: Nickname) => (
"{nick.nickname}" {nick.song_title && ( {nick.song_title} )}
{getStatusBadge(nick.status)} {nick.status === "pending" && (
)}
{nick.description && (

{nick.description}

)}
{nick.show_date && {nick.show_date}} {nick.suggested_by_username && ( Suggested by: {nick.suggested_by_username} )}
) return ( Pending Approved Rejected {loading ? (
Loading...
) : nicknames.length === 0 ? (

No {activeTab} nicknames.

) : (
{nicknames.map(renderNicknameCard)}
)}
) }