"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; export default function AdminUsers({ users }: { users: any[] }) { const router = useRouter(); const [showCreate, setShowCreate] = useState(false); const [filter, setFilter] = useState<"ALL" | "MUAY" | "YOGA">("ALL"); const filtered = users.filter((u) => { if (filter === "MUAY") return u.isMuayThai; if (filter === "YOGA") return u.isYoga; return true; }); return (

👥 Adhérents ({filtered.length})

{( [ ["ALL", "Tous"], ["MUAY", "🥊 Muay Thai"], ["YOGA", "🧘 Yoga"], ] as const ).map(([val, label]) => ( ))}
{showCreate && { setShowCreate(false); router.refresh(); }} />}
{filtered.length === 0 && (

Aucun adhérent.

)} {filtered.map((user) => ( router.refresh()} /> ))}
); } function CreateUserForm({ onDone }: { onDone: () => void }) { const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [role, setRole] = useState("MEMBER"); const [isMuayThai, setIsMuayThai] = useState(true); const [isYoga, setIsYoga] = useState(false); const [error, setError] = useState(""); const [saving, setSaving] = useState(false); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setSaving(true); setError(""); const res = await fetch("/api/admin/users", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name, email, password, role, isMuayThai: role === "MEMBER" ? isMuayThai : false, isYoga: role === "MEMBER" ? isYoga : false, }), }); const data = await res.json(); setSaving(false); if (!res.ok) { setError(data.error || "Erreur"); return; } onDone(); } return (

✨ Créer un compte

setName(e.target.value)} placeholder="Jean Dupont" required />
setEmail(e.target.value)} placeholder="jean@gmail.com" required />
setPassword(e.target.value)} placeholder="Mot de passe temporaire" required />
{role === "MEMBER" && (
)} {error &&

{error}

}
); } function Checkbox({ label, checked, onChange }: { label: string; checked: boolean; onChange: (v: boolean) => void }) { return ( ); } function MemberCard({ user, onUpdate }: { user: any; onUpdate: () => void }) { const [expanded, setExpanded] = useState(false); const [editName, setEditName] = useState(user.name); const [editPassword, setEditPassword] = useState(""); const [editRole, setEditRole] = useState(user.role); const [error, setError] = useState(""); const [saving, setSaving] = useState(false); const certStatus = user.certificates?.find((c: any) => c.status !== "REJECTED")?.status; async function updateUser(data: any) { setSaving(true); setError(""); const res = await fetch(`/api/admin/users/${user.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data), }); setSaving(false); if (res.ok) { setEditPassword(""); onUpdate(); } else { const d = await res.json().catch(() => ({})); setError(d.error || "Erreur lors de la mise à jour"); } } async function deleteUser() { if (!confirm(`Supprimer le compte de ${user.name} ?`)) return; const res = await fetch(`/api/admin/users/${user.id}`, { method: "DELETE", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ id: user.id }), }); if (res.ok) onUpdate(); } const isAdmin = user.role === "ADMIN"; const canDelete = !isAdmin; return (
{user.name.charAt(0).toUpperCase()}

{user.name}

{user.email}

{isAdmin && ( ⭐ Admin )} {user.isMuayThai && ( 🥊 Muay Thai )} {user.isYoga && ( 🧘 Yoga )}
{certStatus && (
Certificat médical
)} {user.yoga && (
Séances yoga restantes {user.yoga.sessionsRemaining}
)} {expanded && (

⚙️ Configuration — {isAdmin ? "compte admin" : "compte membre"}

setEditName(e.target.value)} />
setEditPassword(e.target.value)} placeholder="Nouveau mot de passe (laisser vide pour ne pas changer)" />
{error &&

{error}

}
{canDelete && ( )}
)}
); } function CertBadge({ status }: { status: string }) { switch (status) { case "VALIDATED": return ✓ Validé; case "PENDING": return ⏳ En attente; case "REJECTED": return ✗ Rejeté; default: return null; } }