import { toast } from "react-toastify" const notificationTypes = { success: { icon: "✅", background: "linear-gradient(135deg, #4ecdc4, #44a08d)", color: "white" }, warning: { icon: "⚠️", background: "linear-gradient(135deg, #f39c12, #e67e22)", color: "white" }, error: { icon: "❌", background: "linear-gradient(135deg, #e74c3c, #c0392b)", color: "white" }, info: { icon: "ℹ️", background: "linear-gradient(135deg, #667eea, #764ba2)", color: "white" }, order: { icon: "📦", background: "linear-gradient(135deg, #9b59b6, #8e44ad)", color: "white" }, cart: { icon: "🛒", background: "linear-gradient(135deg, #2ecc71, #27ae60)", color: "white" }, wishlist: { icon: "❤️", background: "linear-gradient(135deg, #e91e63, #c2185b)", color: "white" }, review: { icon: "⭐", background: "linear-gradient(135deg, #ff9800, #f57c00)", color: "white" }, shipping: { icon: "🚚", background: "linear-gradient(135deg, #00bcd4, #0097a7)", color: "white" }, promotion: { icon: "🎁", background: "linear-gradient(135deg, #ff5722, #e64a19)", color: "white" }, } let notificationStore = { notifications: [ { id: 1, type: "success", title: "Order Confirmed", message: "Your Premium order #MK2025001 has been confirmed and is being processed.", timestamp: new Date(Date.now() - 5 * 60 * 1000), read: false, priority: "high", action: { label: "View Order", url: "/orders/MK2025001" }, }, { id: 2, type: "shipping", title: "Package Shipped", message: "Your Premium items are on the way! Expected delivery: Tomorrow", timestamp: new Date(Date.now() - 30 * 60 * 1000), read: false, priority: "medium", action: { label: "Track Package", url: "/tracking" }, }, { id: 3, type: "promotion", title: "Exclusive Offer", message: "Limited time: 25% off on Premium electronics. Use code Premium25", timestamp: new Date(Date.now() - 2 * 60 * 60 * 1000), read: true, priority: "low", action: { label: "Shop Now", url: "/electronics" }, }, ], listeners: [], maxNotifications: 6 } export const addNotification = (notification) => { const newNotification = { id: Date.now(), timestamp: new Date(), read: false, priority: "medium", ...notification } notificationStore.notifications = [newNotification, ...notificationStore.notifications].slice(0, notificationStore.maxNotifications) notificationStore.listeners.forEach(listener => listener(notificationStore.notifications)) const type = notification.type || 'info' const style = notificationTypes[type] toast.info(
{notification.title}
{notification.message}
, { position: "top-right", autoClose: 2000, hideProgressBar: false, closeOnClick: true, pauseOnHover: true, draggable: true, progress: undefined, icon: style.icon, style: { background: style.background, color: style.color, } } ) return newNotification } export const subscribeToNotifications = (callback) => { notificationStore.listeners.push(callback) return () => { notificationStore.listeners = notificationStore.listeners.filter(listener => listener !== callback) } } export const getNotifications = () => { return notificationStore.notifications } export const markNotificationAsRead = (id) => { notificationStore.notifications = notificationStore.notifications.map(notification => notification.id === id ? { ...notification, read: true } : notification ) notificationStore.listeners.forEach(listener => listener(notificationStore.notifications)) } export const markAllNotificationsAsRead = () => { notificationStore.notifications = notificationStore.notifications.map(notification => ({ ...notification, read: true })) notificationStore.listeners.forEach(listener => listener(notificationStore.notifications)) } export const deleteNotification = (id) => { notificationStore.notifications = notificationStore.notifications.filter(notification => notification.id !== id) notificationStore.listeners.forEach(listener => listener(notificationStore.notifications)) } export const clearAllNotifications = () => { notificationStore.notifications = [] notificationStore.listeners.forEach(listener => listener(notificationStore.notifications)) } export const getUnreadCount = () => { return notificationStore.notifications.filter(notification => !notification.read).length } export const notifyCartAction = (action, product) => { const notifications = { add: { type: 'cart', title: 'Added to Cart! 🛒', message: `${product.name} has been added to your cart.`, action: { label: 'View Cart', url: '/cart' } }, remove: { type: 'cart', title: 'Removed from Cart', message: `${product.name} has been removed from your cart.`, action: { label: 'View Cart', url: '/cart' } }, update: { type: 'cart', title: 'Cart Updated', message: `Quantity updated for ${product.name}.`, action: { label: 'View Cart', url: '/cart' } }, failed: { type: 'error', title: 'Cart Operation Failed! ❌', message: `Failed to ${action === 'add' ? 'add' : action === 'remove' ? 'remove' : 'update'} ${product.name} from your cart.`, action: { label: 'Try Again', url: '/cart' } }, error: { type: 'error', title: 'Cart Error! ❌', message: `An error occurred while ${action === 'add' ? 'adding' : action === 'remove' ? 'removing' : 'updating'} ${product.name}.`, action: { label: 'Try Again', url: '/cart' } } } return addNotification(notifications[action]) } export const notifyWishlistAction = (action, product) => { const notifications = { add: { type: 'wishlist', title: 'Added to Wishlist! ❤️', message: `${product.name} has been added to your wishlist.`, action: { label: 'View Wishlist', url: '/wishlist' } }, remove: { type: 'wishlist', title: 'Removed from Wishlist', message: `${product.name} has been removed from your wishlist.`, action: { label: 'View Wishlist', url: '/wishlist' } }, failed: { type: 'error', title: 'Wishlist Operation Failed! ❌', message: `Failed to ${action === 'add' ? 'add' : 'remove'} ${product.name} from your wishlist.`, action: { label: 'Try Again', url: '/wishlist' } }, error: { type: 'error', title: 'Wishlist Error! ❌', message: `An error occurred while ${action === 'add' ? 'adding' : 'removing'} ${product.name} to/from your wishlist.`, action: { label: 'Try Again', url: '/wishlist' } } } return addNotification(notifications[action]) } export const notifyOrderAction = (action, orderId) => { const notifications = { placed: { type: 'order', title: 'Order Placed! 📦', message: `Your order #${orderId} has been successfully placed.`, action: { label: 'Track Order', url: `/orders/${orderId}` } }, shipped: { type: 'shipping', title: 'Order Shipped! 🚚', message: `Your order #${orderId} is on its way to you.`, action: { label: 'Track Package', url: `/tracking/${orderId}` } }, delivered: { type: 'success', title: 'Order Delivered! ✅', message: `Your order #${orderId} has been delivered.`, action: { label: 'Review Product', url: `/reviews/write` } } } return addNotification(notifications[action]) }