"use client"; import { useState, useEffect, useCallback } from "react"; import { MessageCircle, Reply, Trash2 } from "lucide-react"; import { toast } from "sonner"; import { useTranslations } from "next-intl"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Separator } from "@/components/ui/separator"; import { CommentReactions } from "@/components/social/comment-reactions"; type Comment = { id: string; content: string; parentId: string | null; createdAt: string; userId: string; userName: string; userUsername: string | null; userAvatarUrl: string | null; }; function timeAgo(dateStr: string) { const diff = Date.now() - new Date(dateStr).getTime(); const mins = Math.floor(diff / 60000); if (mins < 1) return "just now"; if (mins < 60) return `${mins}m ago`; const hours = Math.floor(mins / 60); if (hours < 24) return `${hours}h ago`; return `${Math.floor(hours / 24)}d ago`; } function CommentForm({ recipeId, parentId, onSubmit, placeholder = "Add a comment…", onCancel, }: { recipeId: string; parentId?: string; onSubmit: () => void; placeholder?: string; onCancel?: () => void; }) { const [content, setContent] = useState(""); const [submitting, setSubmitting] = useState(false); async function submit() { if (!content.trim()) return; setSubmitting(true); try { const res = await fetch(`/api/v1/recipes/${recipeId}/comments`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ content: content.trim(), parentId }), }); if (!res.ok) { toast.error("Failed to post comment"); return; } setContent(""); onSubmit(); } finally { setSubmitting(false); } } return (