"use client"; import { useState, useEffect } from "react"; interface Feedback { id: string; rating: number; comment: string | null; createdAt: string; event: { id: string; name: string; date: string; type: string; }; user: { id: string; username: string; email: string; }; } interface EventStatistics { eventId: string; eventName: string; eventDate: string | null; eventType: string | null; averageRating: number; feedbackCount: number; } export default function FeedbackManagement() { const [feedbacks, setFeedbacks] = useState([]); const [statistics, setStatistics] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [selectedEvent, setSelectedEvent] = useState(null); useEffect(() => { fetchFeedbacks(); }, []); const fetchFeedbacks = async () => { try { const response = await fetch("/api/admin/feedback"); if (!response.ok) { setError("Erreur lors du chargement des feedbacks"); return; } const data = await response.json(); setFeedbacks(data.feedbacks || []); setStatistics(data.statistics || []); } catch { setError("Erreur lors du chargement des feedbacks"); } finally { setLoading(false); } }; const getEventTypeLabel = (type: string) => { switch (type) { case "ATELIER": return "Atelier"; case "KATA": return "Kata"; case "PRESENTATION": return "Présentation"; case "LEARNING_HOUR": return "Learning Hour"; default: return type; } }; const renderStars = (rating: number) => { return (
{[1, 2, 3, 4, 5].map((star) => ( ))} ({rating}/5)
); }; const filteredFeedbacks = selectedEvent ? feedbacks.filter((f) => f.event.id === selectedEvent) : feedbacks; if (loading) { return (

Chargement...

); } return (
{/* Statistiques par événement */} {statistics.length > 0 && (

Statistiques par événement

{statistics.map((stat) => (
setSelectedEvent( selectedEvent === stat.eventId ? null : stat.eventId ) } >

{stat.eventName}

{stat.eventType && getEventTypeLabel(stat.eventType)}
{renderStars(Math.round(stat.averageRating))}
Moyenne: {stat.averageRating.toFixed(2)}/5
{stat.feedbackCount} feedback {stat.feedbackCount > 1 ? "s" : ""}
))}
{selectedEvent && ( )}
)} {/* Liste des feedbacks */}

{selectedEvent ? `Feedbacks pour: ${ statistics.find((s) => s.eventId === selectedEvent)?.eventName }` : "Tous les feedbacks"}

{error && (
{error}
)} {filteredFeedbacks.length === 0 ? (

Aucun feedback pour le moment

) : (
{filteredFeedbacks.map((feedback) => (

{feedback.user.username}

{feedback.user.email}
{feedback.event.name}
{new Date(feedback.createdAt).toLocaleDateString( "fr-FR", { day: "numeric", month: "long", year: "numeric", hour: "2-digit", minute: "2-digit", } )}
{renderStars(feedback.rating)}
{feedback.comment && (

{feedback.comment}

)}
))}
)}
); }