"use client"; import { Card, Button, Avatar, Badge } from "@/components/ui"; interface ChallengeCardProps { challenge: { id: string; challenger: { id: string; username: string; avatar: string | null; }; challenged: { id: string; username: string; avatar: string | null; }; title: string; description: string; pointsReward: number; status: string; adminComment: string | null; winner?: { id: string; username: string; } | null; createdAt: string; acceptedAt: string | null; completedAt: string | null; }; currentUserId?: string; onAccept?: (challengeId: string) => void; onCancel?: (challengeId: string) => void; isPending?: boolean; } const getStatusLabel = (status: string) => { switch (status) { case "PENDING": return "En attente d'acceptation"; case "ACCEPTED": return "En cours - En attente de désignation du gagnant"; case "COMPLETED": return "Complété"; case "REJECTED": return "Rejeté"; case "CANCELLED": return "Annulé"; default: return status; } }; const getStatusVariant = ( status: string ): "default" | "success" | "warning" | "danger" | "info" => { switch (status) { case "PENDING": return "warning"; case "ACCEPTED": return "info"; case "COMPLETED": return "success"; case "REJECTED": return "danger"; case "CANCELLED": return "default"; default: return "default"; } }; export default function ChallengeCard({ challenge, currentUserId, onAccept, onCancel, isPending = false, }: ChallengeCardProps) { const isChallenger = challenge.challenger.id === currentUserId; const isChallenged = challenge.challenged.id === currentUserId; const canAccept = challenge.status === "PENDING" && isChallenged; const canCancel = (challenge.status === "PENDING" || challenge.status === "ACCEPTED") && (isChallenger || isChallenged); return (

{challenge.title}

{getStatusLabel(challenge.status)}

{challenge.description}

{challenge.challenger.username}
VS
{challenge.challenged.username}
Récompense:{" "} {challenge.pointsReward} points
{challenge.winner && (
🏆 Gagnant: {challenge.winner.username}
)} {challenge.adminComment && (
Admin: {challenge.adminComment}
)}
Créé le: {new Date(challenge.createdAt).toLocaleDateString("fr-FR")} {challenge.acceptedAt && ` • Accepté le: ${new Date(challenge.acceptedAt).toLocaleDateString("fr-FR")}`} {challenge.completedAt && ` • Complété le: ${new Date(challenge.completedAt).toLocaleDateString("fr-FR")}`}
{canAccept && onAccept && ( )} {canCancel && onCancel && ( )}
); }