// hooks/useNotificationStore.ts import { apiGetNotificationsById } from "@/service/api-notifications"; import { createContext, ReactNode, useContext, useState, useEffect } from "react"; import { useAuth } from "./use-auth"; type AppNotification = { id: string; title: string; body: string; data?: Record; isRead: boolean; timestamp: number; type: "notification" | "trigger"; appId?: string; kategoriApp?: | "JOB" | "VOTING" | "EVENT" | "DONASI" | "INVESTASI" | "COLLABORATION" | "FORUM" | "ACCESS"; }; type NotificationContextType = { notifications: AppNotification[]; unreadCount: number; addNotification: ( notif: Omit ) => void; markAsRead: (id: string) => void; syncUnreadCount: () => Promise; }; const NotificationContext = createContext({ notifications: [], unreadCount: 0, addNotification: () => {}, markAsRead: () => {}, syncUnreadCount: async () => {}, }); export const NotificationProvider = ({ children }: { children: ReactNode }) => { const {user} = useAuth() const [notifications, setNotifications] = useState([]); const [unreadCount, setUnreadCount] = useState(0); // 🔔 Sync unread count dari backend saat provider di-mount useEffect(() => { const fetchUnreadCount = async () => { try { const count = await apiGetNotificationsById({ id: user?.id as any, category: "count-as-unread" }); // ← harus return number const result = count.data setUnreadCount(result); } catch (error) { console.erro("⚠️ Gagal fetch unread count:", error); } }; fetchUnreadCount(); }, []); const addNotification = ( notif: Omit ) => { setNotifications((prev) => [ { ...notif, id: Date.now().toString(), isRead: false, timestamp: Date.now(), }, ...prev, ]); // Tambahkan ke unread count (untuk notifikasi foreground) setUnreadCount((prev) => prev + 1); }; const markAsRead = (id: string) => { setNotifications((prev) => prev.map((n) => (n.id === id ? { ...n, isRead: true } : n)) ); // Kurangi unread count setUnreadCount((prev) => Math.max(0, prev - 1)); }; const syncUnreadCount = async () => { try { const count = await apiGetNotificationsById({ id: user?.id as any, category: "count-as-unread" }); // ← harus return number const result = count.data setUnreadCount(result); } catch (error) { console.warn("⚠️ Gagal sync unread count:", error); } }; return ( {children} ); }; export const useNotificationStore = () => useContext(NotificationContext);