'use client'; import { useState } from 'react'; import { Heart, MessageCircle, Share2, MoreHorizontal, Bookmark, Link as LinkIcon, Flag } from 'lucide-react'; import { fetchApi } from '@/lib/utils/client'; import useAuth from '@/hooks/useAuth'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'; type Props = { postID: number; initialLikes: number; initialComments: number; initialBookmarks: number; }; export default function FeedActionBar({ postID, initialLikes, initialComments }: Props) { const { loginCheck } = useAuth(); const [likes, setLikes] = useState(initialLikes); const [liked, setLiked] = useState(false); const [bookmarked, setBookmarked] = useState(false); const [busy, setBusy] = useState(false); const handleLike = async () => { if (!loginCheck() || busy) { return; } setBusy(true); try { const res = await fetchApi<{ hasLike: boolean; likes: number }>(`/api/feed/post/${postID}/like`, { method: 'POST', silent: true }); if (res.success && res.data) { setLiked(res.data.hasLike); setLikes(res.data.likes); } } catch (err) { console.error(err); } finally { setBusy(false); } }; const handleBookmark = async () => { if (!loginCheck() || busy) { return; } setBusy(true); try { const res = await fetchApi<{ hasBookmark: boolean; bookmarks: number }>(`/api/feed/post/${postID}/bookmark`, { method: 'POST', silent: true }); if (res.success && res.data) { setBookmarked(res.data.hasBookmark); } } catch (err) { console.error(err); } finally { setBusy(false); } }; const handleShare = async () => { const url = `${window.location.origin}/feed/post/${postID}`; try { await navigator.clipboard.writeText(url); alert('링크가 복사되었습니다.'); } catch { prompt('링크를 복사하세요:', url); } }; return (