"use client"; import { useState } from "react"; import { useSession } from "next-auth/react"; import Card from "@/components/ui/Card"; import Button from "@/components/ui/Button"; import Avatar from "@/components/ui/Avatar"; import { requestToJoin } from "@/actions/houses/requests"; import { useTransition } from "react"; import Alert from "@/components/ui/Alert"; interface House { id: string; name: string; description: string | null; creator: { id: string; username: string; avatar: string | null; }; memberships?: Array<{ id: string; role: string; user: { id: string; username: string; avatar: string | null; score?: number; level?: number; }; }>; _count?: { memberships: number; }; } interface HouseCardProps { house: House; onRequestSent?: () => void; } export default function HouseCard({ house, onRequestSent }: HouseCardProps) { const { data: session } = useSession(); const [isPending, startTransition] = useTransition(); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const isMember = house.memberships?.some( (m) => m.user.id === session?.user?.id ); const memberCount = house._count?.memberships || house.memberships?.length || 0; const handleRequestToJoin = () => { if (!session?.user?.id) return; setError(null); setSuccess(null); startTransition(async () => { const result = await requestToJoin(house.id); if (result.success) { setSuccess("Demande envoyée avec succès"); onRequestSent?.(); } else { setError(result.error || "Erreur lors de l'envoi de la demande"); } }); }; return (

{house.name}

{house.description && (

{house.description}

)}
Créée par {house.creator.username} {memberCount} membre{memberCount > 1 ? "s" : ""}
{error && ( {error} )} {success && ( {success} )} {session?.user?.id && !isMember && ( )} {isMember && (
✓ Vous êtes membre
)} {/* Members List */} {house.memberships && house.memberships.length > 0 && (

Membres ({house.memberships.length})

{house.memberships.map((membership) => (
{membership.user.username} {membership.role === "OWNER" && ( 👑 )}
{membership.user.score !== undefined && membership.user.level !== undefined && (
{membership.user.score} pts • Lv.{membership.user.level}
)}
))}
)}
); }