"use client"; import { useState, useEffect } from "react"; import { calculateEventStatus } from "@/lib/eventStatus"; interface Event { id: string; date: string; name: string; description: string; type: "ATELIER" | "KATA" | "PRESENTATION" | "LEARNING_HOUR"; status: "UPCOMING" | "LIVE" | "PAST"; room?: string | null; time?: string | null; maxPlaces?: number | null; createdAt: string; updatedAt: string; registrationsCount?: number; } interface EventFormData { date: string; name: string; description: string; type: "ATELIER" | "KATA" | "PRESENTATION" | "LEARNING_HOUR"; room?: string; time?: string; maxPlaces?: number; } const eventTypes: Event["type"][] = [ "ATELIER", "KATA", "PRESENTATION", "LEARNING_HOUR", ]; const getEventTypeLabel = (type: Event["type"]) => { 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 getStatusLabel = (status: Event["status"]) => { switch (status) { case "UPCOMING": return "À venir"; case "LIVE": return "En cours"; case "PAST": return "Passé"; default: return status; } }; export default function EventManagement() { const [events, setEvents] = useState([]); const [loading, setLoading] = useState(true); const [editingEvent, setEditingEvent] = useState(null); const [isCreating, setIsCreating] = useState(false); const [saving, setSaving] = useState(false); const [formData, setFormData] = useState({ date: "", name: "", description: "", type: "ATELIER", room: "", time: "", maxPlaces: undefined, }); useEffect(() => { fetchEvents(); }, []); const fetchEvents = async () => { try { const response = await fetch("/api/admin/events"); if (response.ok) { const data = await response.json(); setEvents(data); } } catch (error) { console.error("Error fetching events:", error); } finally { setLoading(false); } }; const handleCreate = () => { setIsCreating(true); setEditingEvent(null); setFormData({ date: "", name: "", description: "", type: "ATELIER", room: "", time: "", maxPlaces: undefined, }); }; const handleEdit = (event: Event) => { setEditingEvent(event); setIsCreating(false); setFormData({ date: event.date, name: event.name, description: event.description, type: event.type, room: event.room || "", time: event.time || "", maxPlaces: event.maxPlaces || undefined, }); }; const handleSave = async () => { setSaving(true); try { let response; if (isCreating) { response = await fetch("/api/admin/events", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(formData), }); } else if (editingEvent) { response = await fetch(`/api/admin/events/${editingEvent.id}`, { method: "PUT", headers: { "Content-Type": "application/json", }, body: JSON.stringify(formData), }); } if (response?.ok) { await fetchEvents(); setEditingEvent(null); setIsCreating(false); setFormData({ date: "", name: "", description: "", type: "ATELIER", room: "", time: "", maxPlaces: undefined, }); } else { const error = await response?.json(); alert(error.error || "Erreur lors de la sauvegarde"); } } catch (error) { console.error("Error saving event:", error); alert("Erreur lors de la sauvegarde"); } finally { setSaving(false); } }; const handleDelete = async (eventId: string) => { if (!confirm("Êtes-vous sûr de vouloir supprimer cet événement ?")) { return; } try { const response = await fetch(`/api/admin/events/${eventId}`, { method: "DELETE", }); if (response.ok) { await fetchEvents(); } else { const error = await response.json(); alert(error.error || "Erreur lors de la suppression"); } } catch (error) { console.error("Error deleting event:", error); alert("Erreur lors de la suppression"); } }; const handleCancel = () => { setEditingEvent(null); setIsCreating(false); setFormData({ date: "", name: "", description: "", type: "ATELIER", room: "", time: "", maxPlaces: undefined, }); }; if (loading) { return
Chargement...
; } return (

Événements ({events.length})

{!isCreating && !editingEvent && ( )}
{(isCreating || editingEvent) && (

{isCreating ? "Créer un événement" : "Modifier l'événement"}

setFormData({ ...formData, date: e.target.value }) } className="w-full px-3 py-2 bg-black/60 border border-pixel-gold/30 rounded text-white text-sm" />
setFormData({ ...formData, name: e.target.value }) } placeholder="Nom de l'événement" className="w-full px-3 py-2 bg-black/60 border border-pixel-gold/30 rounded text-white text-sm" />