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(
    <div>
      <div style={{ fontWeight: 'bold', marginBottom: '4px' }}>{notification.title}</div>
      <div style={{ fontSize: '0.9rem' }}>{notification.message}</div>
    </div>,
    {
      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])
}