"use client"; import { useState, useTransition } from "react"; import { Input, Textarea, Button, Card, Badge, Modal, CloseButton, Avatar, } from "@/components/ui"; import { updateHouse, deleteHouse, removeMember } from "@/actions/admin/houses"; interface House { id: string; name: string; description: string | null; creatorId: string; creator: { id: string; username: string; avatar: string | null; }; createdAt: string; updatedAt: string; membersCount: number; memberships: Array<{ id: string; role: string; joinedAt: string; user: { id: string; username: string; avatar: string | null; score: number; level: number; }; }>; } interface HouseFormData { name: string; description: string; } const getRoleLabel = (role: string) => { switch (role) { case "OWNER": return "👑 Propriétaire"; case "ADMIN": return "⚡ Admin"; case "MEMBER": return "👤 Membre"; default: return role; } }; const getRoleColor = (role: string) => { switch (role) { case "OWNER": return "var(--accent)"; case "ADMIN": return "var(--primary)"; case "MEMBER": return "var(--muted-foreground)"; default: return "var(--gray)"; } }; interface HouseManagementProps { initialHouses: House[]; } export default function HouseManagement({ initialHouses }: HouseManagementProps) { const [houses, setHouses] = useState(initialHouses); const [editingHouse, setEditingHouse] = useState(null); const [saving, setSaving] = useState(false); const [deletingHouseId, setDeletingHouseId] = useState(null); const [viewingMembers, setViewingMembers] = useState(null); const [removingMemberId, setRemovingMemberId] = useState(null); const [formData, setFormData] = useState({ name: "", description: "", }); const [, startTransition] = useTransition(); const fetchHouses = async () => { try { const response = await fetch("/api/admin/houses"); if (response.ok) { const data = await response.json(); setHouses(data); } } catch (error) { console.error("Error fetching houses:", error); } }; const handleEdit = (house: House) => { setEditingHouse(house); setFormData({ name: house.name, description: house.description || "", }); }; const handleSave = async () => { if (!editingHouse) return; setSaving(true); startTransition(async () => { try { const result = await updateHouse(editingHouse.id, { name: formData.name, description: formData.description || null, }); if (result.success) { await fetchHouses(); setEditingHouse(null); setFormData({ name: "", description: "" }); } else { alert(result.error || "Erreur lors de la mise à jour"); } } catch (error) { console.error("Error updating house:", error); alert("Erreur lors de la mise à jour"); } finally { setSaving(false); } }); }; const handleDelete = async (houseId: string) => { if ( !confirm( "Êtes-vous sûr de vouloir supprimer cette maison ? Cette action est irréversible et supprimera tous les membres." ) ) { return; } setDeletingHouseId(houseId); startTransition(async () => { try { const result = await deleteHouse(houseId); if (result.success) { await fetchHouses(); } else { alert(result.error || "Erreur lors de la suppression"); } } catch (error) { console.error("Error deleting house:", error); alert("Erreur lors de la suppression"); } finally { setDeletingHouseId(null); } }); }; const handleCancel = () => { setEditingHouse(null); setFormData({ name: "", description: "" }); }; const handleRemoveMember = async (houseId: string, memberId: string) => { if ( !confirm( "Êtes-vous sûr de vouloir retirer ce membre de la maison ? Cette action lui retirera des points." ) ) { return; } setRemovingMemberId(memberId); startTransition(async () => { try { const result = await removeMember(houseId, memberId); if (result.success) { // Récupérer les maisons mises à jour const response = await fetch("/api/admin/houses"); if (response.ok) { const updatedHouses = await response.json(); setHouses(updatedHouses); // Mettre à jour la modal si elle est ouverte if (viewingMembers) { const updatedHouse = updatedHouses.find((h: House) => h.id === houseId); if (updatedHouse) { setViewingMembers(updatedHouse); } else { // Si la maison n'existe plus, fermer la modal setViewingMembers(null); } } } } else { alert(result.error || "Erreur lors du retrait du membre"); } } catch (error) { console.error("Error removing member:", error); alert("Erreur lors du retrait du membre"); } finally { setRemovingMemberId(null); } }); }; const formatNumber = (num: number) => { return num.toLocaleString("en-US"); }; return (

Maisons ({houses.length})

{/* Modal d'édition */} {editingHouse && (

Modifier la maison

setFormData({ ...formData, name: e.target.value }) } placeholder="Nom de la maison" className="text-xs sm:text-sm px-3 py-2" />