"use client" import { useState } from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { toast } from "sonner" import { useTranslations } from "next-intl" import { ArrowLeft, Mail, Reply, Trash2 } from "lucide-react" import { Badge } from "@/shared/components/ui/badge" import { Button } from "@/shared/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/shared/components/ui/card" import { ConfirmDeleteDialog } from "@/shared/components/ui/confirm-delete-dialog" import { formatDate } from "@/shared/lib/utils" import { usePermission } from "@/shared/hooks/use-permission" import { Permissions } from "@/shared/types/permissions" import { deleteMessageAction } from "../actions" import type { Message } from "../types" export function MessageDetail({ message, currentUserId, backHref = "/messages", }: { message: Message currentUserId: string backHref?: string }) { const t = useTranslations("messages") const router = useRouter() const [isWorking, setIsWorking] = useState(false) const [deleteOpen, setDeleteOpen] = useState(false) const { hasPermission } = usePermission() const canSend = hasPermission(Permissions.MESSAGE_SEND) const canDelete = hasPermission(Permissions.MESSAGE_DELETE) const isReceived = message.receiverId === currentUserId const counterpart = isReceived ? message.senderName : message.receiverName const counterpartLabel = isReceived ? t("meta.from") : t("meta.to") const handleDelete = async () => { setIsWorking(true) try { const res = await deleteMessageAction(message.id) if (res.success) { toast.success(res.message) router.push("/messages") router.refresh() } else { toast.error(res.message || t("messages.deleteFailed")) } } catch { toast.error(t("messages.deleteFailed")) } finally { setIsWorking(false) setDeleteOpen(false) } } const replyHref = canSend ? `/messages/compose?parentId=${message.id}&receiverId=${isReceived ? message.senderId : message.receiverId}&subject=${encodeURIComponent( message.subject?.startsWith("Re:") ? message.subject : `Re: ${message.subject ?? ""}` )}` : undefined return (

{t("title.detail")}

{canSend ? ( ) : null} {canDelete ? ( ) : null}
{message.subject ?? t("meta.noSubject")}
{counterpartLabel}: {counterpart ?? t("meta.unknown")} · {formatDate(message.createdAt)} {message.readAt && isReceived ? ( <> · {t("meta.readAt", { date: formatDate(message.readAt) })} ) : null}

{message.content}

) }