const Notification = require("../../models/Notification");

module.exports = (io, socket) => {
  socket.on("notifications:get_all", async () => {
    try {
      const list = await Notification.findAll({
        where: { playerId: socket.user.id },
        order: [["createdAt", "DESC"]],
        limit: 50,
      });

      socket.emit("notifications:list", list);

      const unreadCount = list.filter((n) => !n.isRead).length;
      socket.emit("notifications:unread_count", unreadCount);
    } catch (e) {
      console.error("Fetch notifications error:", e);
    }
  });

  socket.on("notification:read", async ({ id }) => {
    try {
      await Notification.update(
        { isRead: true },
        { where: { id, playerId: socket.user.id } },
      );

      const unreadCount = await Notification.count({
        where: { playerId: socket.user.id, isRead: false },
      });
      socket.emit("notifications:unread_count", unreadCount);
    } catch (e) {
      console.error("Read notification error:", e);
    }
  });

  socket.on("notification:dismiss", async ({ id }) => {
    try {
      await Notification.destroy({
        where: { id, playerId: socket.user.id },
      });

      const unreadCount = await Notification.count({
        where: { playerId: socket.user.id, isRead: false },
      });
      socket.emit("notifications:unread_count", unreadCount);
    } catch (e) {
      console.error("Dismiss notification error:", e);
    }
  });
};
