"use client"; import { useState, useEffect } from "react"; import { getSentMailList, restoreMail, permanentlyDeleteMail, type SentMailHistory } from "@/lib/api/mail"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { RotateCcw, Trash2, Loader2, Mail, AlertCircle } from "lucide-react"; import { format } from "date-fns"; import { ko } from "date-fns/locale"; export default function TrashPage() { const [trashedMails, setTrashedMails] = useState([]); const [loading, setLoading] = useState(true); const [restoring, setRestoring] = useState(null); const [deleting, setDeleting] = useState(null); useEffect(() => { loadTrashedMails(); }, []); const loadTrashedMails = async () => { try { setLoading(true); const response = await getSentMailList({ onlyDeleted: true, sortBy: "sentAt", sortOrder: "desc", }); setTrashedMails(response.items); } catch (error) { // console.error("휴지통 메일 로드 실패:", error); } finally { setLoading(false); } }; const handleRestore = async (id: string) => { try { setRestoring(id); await restoreMail(id); setTrashedMails(trashedMails.filter((m) => m.id !== id)); } catch (error) { // console.error("메일 복구 실패:", error); alert("복구에 실패했습니다."); } finally { setRestoring(null); } }; const handlePermanentDelete = async (id: string) => { if (!confirm("이 메일을 영구적으로 삭제하시겠습니까?\n이 작업은 되돌릴 수 없습니다.")) return; try { setDeleting(id); await permanentlyDeleteMail(id); setTrashedMails(trashedMails.filter((m) => m.id !== id)); } catch (error) { // console.error("메일 영구 삭제 실패:", error); alert("삭제에 실패했습니다."); } finally { setDeleting(null); } }; const handleEmptyTrash = async () => { if (!confirm(`휴지통의 모든 메일(${trashedMails.length}개)을 영구적으로 삭제하시겠습니까?\n이 작업은 되돌릴 수 없습니다.`)) return; try { setLoading(true); await Promise.all(trashedMails.map((mail) => permanentlyDeleteMail(mail.id))); setTrashedMails([]); alert("휴지통을 비웠습니다."); } catch (error) { // console.error("휴지통 비우기 실패:", error); alert("일부 메일 삭제에 실패했습니다."); } finally { setLoading(false); } }; if (loading) { return (
); } return (

휴지통

삭제된 메일은 30일 후 자동으로 영구 삭제됩니다

{trashedMails.length > 0 && ( )}
{trashedMails.length === 0 ? (

휴지통이 비어 있습니다

) : (
{trashedMails.map((mail) => { const deletedDate = mail.deletedAt ? new Date(mail.deletedAt) : null; const daysLeft = deletedDate ? Math.max(0, 30 - Math.floor((Date.now() - deletedDate.getTime()) / (1000 * 60 * 60 * 24))) : 30; return (
{mail.subject || "(제목 없음)"} 받는 사람: {mail.to.join(", ") || "(없음)"}
계정: {mail.accountName || mail.accountEmail} {format(new Date(mail.sentAt), "yyyy-MM-dd HH:mm", { locale: ko })}
{daysLeft <= 7 && (
{daysLeft}일 후 자동 삭제됩니다
)}
); })}
)}
); }