'use client'; import { createContext, useContext, useState, useEffect, useCallback } from 'react'; import { getUserNotifications } from '../utils/api'; import AuthService from '../services/AuthService'; const NotificationsContext = createContext(); export const useNotifications = () => { const context = useContext(NotificationsContext); if (!context) { throw new Error('useNotifications must be used within NotificationsProvider'); } return context; }; export function NotificationsProvider({ children }) { const [notifications, setNotifications] = useState([]); const [unreadCount, setUnreadCount] = useState(0); const [isLoading, setIsLoading] = useState(false); const fetchNotifications = useCallback(async () => { if (!AuthService.isAuthenticated()) { setNotifications([]); setUnreadCount(0); return; } setIsLoading(true); try { const data = await getUserNotifications(); const notificationsArray = Array.isArray(data) ? data : []; setNotifications(notificationsArray); // Assuming all are unread for now, or add logic to check 'read' field if exists setUnreadCount(notificationsArray.length); } catch (error) { console.error('Error fetching notifications:', error); setNotifications([]); setUnreadCount(0); } finally { setIsLoading(false); } }, []); useEffect(() => { fetchNotifications(); }, [fetchNotifications]); const markAsRead = useCallback((id) => { setNotifications(prev => prev.map(n => (n.id === id ? { ...n, read: true } : n)) ); setUnreadCount(prev => Math.max(0, prev - 1)); }, []); const markAllAsRead = useCallback(() => { setNotifications(prev => prev.map(n => ({ ...n, read: true }))); setUnreadCount(0); }, []); const value = { notifications, unreadCount, isLoading, fetchNotifications, markAsRead, markAllAsRead, }; return ( {children} ); }