"use client"; import { Eye, Heart, MoreHorizontal, Share2 } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/navigation"; import * as React from "react"; import { toast } from "sonner"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardFooter, CardHeader, } from "@/components/ui/card"; import { useAuth } from "@/providers/auth-provider"; import { ContentService } from "@/services/content.service"; import { FavoriteService } from "@/services/favorite.service"; import type { Content } from "@/types/content"; interface ContentCardProps { content: Content; } export function ContentCard({ content }: ContentCardProps) { const { isAuthenticated } = useAuth(); const router = useRouter(); const [isLiked, setIsLiked] = React.useState(content.isLiked || false); const [likesCount, setLikesCount] = React.useState(content.favoritesCount); React.useEffect(() => { setIsLiked(content.isLiked || false); setLikesCount(content.favoritesCount); }, [content.isLiked, content.favoritesCount]); const handleLike = async (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); if (!isAuthenticated) { toast.error("Vous devez être connecté pour liker un mème"); router.push("/login"); return; } try { if (isLiked) { await FavoriteService.remove(content.id); setIsLiked(false); setLikesCount((prev) => prev - 1); } else { await FavoriteService.add(content.id); setIsLiked(true); setLikesCount((prev) => prev + 1); } } catch (_error) { toast.error("Une erreur est survenue"); } }; const handleUse = async (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); try { await ContentService.incrementUsage(content.id); toast.success("Mème prêt à être utilisé !"); } catch (_error) { toast.error("Une erreur est survenue"); } }; return ( {content.author.username[0].toUpperCase()}
{content.author.displayName || content.author.username} {new Date(content.createdAt).toLocaleDateString("fr-FR")}
{content.mimeType.startsWith("image/") ? ( {content.title} ) : (

{content.title}

{content.tags.slice(0, 3).map((tag, _i) => ( #{typeof tag === "string" ? tag : tag.name} ))}
); }