const jwt = require('jsonwebtoken')
const NotificationModel = require('../../../models/NotificationModel')
const jMoment = require('moment-jalaali')

const getNotifications = async (req, res, next) => {
  try {
    const token = req.header('Authorization').split(' ')[1]
    if (!token) return res.status(401).send('Access Denied')

    const decodedToken = jwt.verify(token, process.env.APP_SECRET)
    const userId = decodedToken.id
    const { page = 1, limit = 10, search } = req.query // افزودن پارامترهای صفحه‌بندی به درخواست
    const filter = { user_id: userId }
    if (search) {
      filter.$or = [
        { title: { $regex: search, $options: 'i' } },
        { description: { $regex: search, $options: 'i' } }
      ]
    }
    // استفاده از مدل پیجینیت شده برای دریافت نتایج صفحه‌بندی شده
    const options = {
      page: parseInt(page), // تبدیل صفحه به عدد صحیح
      limit: parseInt(limit), // تبدیل محدودیت به عدد صحیح
      sort: { createdAt: -1 } // بر اساس زمان ایجاد (createdAt) مرتب کنید (نزولی)
    }

    // دریافت اعلان‌های مربوط به کاربر با استفاده از userId
    let notifications = await NotificationModel.paginate(filter, options)
    const totalPages = notifications.totalPages
    const totalItems = notifications.totalDocs
    notifications = notifications?.docs.map(notification => {
      const jDate = jMoment(notification.createdAt).format('jYYYY-jMM-jDD HH:mm')
      return {
        ...notification._doc,
        createdAt: jDate
      }
    })
    // تغییر وضعیت "read" اعلان‌ها به "true"
    await NotificationModel.updateMany({ user_id: userId }, { read: true })
    res.json({
      notifications,
      totalPages, // ارسال تعداد کل صفحات
      totalItems // ارسال تعداد کل آیتم‌ها
    })
  } catch (error) {
    next(error)
  }
}
const unreadNotifications = async (req, res, next) => {
  try {
    const token = req.header('Authorization').split(' ')[1]
    if (!token) return res.status(401).send('Access Denied')

    const decodedToken = jwt.verify(token, process.env.APP_SECRET)
    const userId = decodedToken.id

    // دریافت تعداد اعلان‌های جدید برای کاربر
    const newNotificationsCount = await NotificationModel.countDocuments({ user_id: userId, read: false }).exec()

    res.json({ newNotificationsCount })
  } catch (error) {
    next(error)
  }
}

module.exports = {
  getNotifications, unreadNotifications
}
