"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 { Archive, ArrowLeft, Megaphone, Pencil, Send, 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 { archiveAnnouncementAction, deleteAnnouncementAction, publishAnnouncementAction, } from "../actions" import type { Announcement } from "../types" export function AnnouncementDetail({ announcement, canManage, editHref, backHref, }: { announcement: Announcement canManage?: boolean editHref?: string backHref?: string }) { const t = useTranslations("announcements") const router = useRouter() const [isWorking, setIsWorking] = useState(false) const [deleteOpen, setDeleteOpen] = useState(false) const handlePublish = async () => { setIsWorking(true) try { const res = await publishAnnouncementAction(announcement.id) if (res.success) { toast.success(res.message) router.refresh() } else { toast.error(res.message || t("messages.publishFailed")) } } catch { toast.error(t("messages.publishFailed")) } finally { setIsWorking(false) } } const handleArchive = async () => { setIsWorking(true) try { const res = await archiveAnnouncementAction(announcement.id) if (res.success) { toast.success(res.message) router.refresh() } else { toast.error(res.message || t("messages.archiveFailed")) } } catch { toast.error(t("messages.archiveFailed")) } finally { setIsWorking(false) } } const handleDelete = async () => { setIsWorking(true) try { const res = await deleteAnnouncementAction(announcement.id) if (res.success) { toast.success(res.message) router.push("/admin/announcements") router.refresh() } else { toast.error(res.message || t("messages.deleteFailed")) } } catch { toast.error(t("messages.deleteFailed")) } finally { setIsWorking(false) setDeleteOpen(false) } } return (
{backHref ? ( ) : null}

{t("title.detail")}

{canManage ? (
{announcement.status !== "published" ? ( ) : null} {announcement.status !== "archived" ? ( ) : null} {editHref ? ( ) : null}
) : null}
{t(`type.${announcement.type}`)} {t(`status.${announcement.status}`)}
{announcement.title}
{announcement.publishedAt ? t("meta.publishedAt", { date: formatDate(announcement.publishedAt) }) : t("meta.createdAt", { date: formatDate(announcement.createdAt) })} {announcement.authorName ? {t("meta.author", { name: announcement.authorName })} : null}

{announcement.content}

) }