const Notification = require('../models/Notification');
const User = require('../models/User');
const { sendPush } = require('./firebasePush');
const logger = require('./logger');

/**
 * دالة مساعدة لإرسال الإشعارات وحفظها
 * تدعم: حفظ في DB + Socket.IO (داخل التطبيق) + FCM Push (خارج التطبيق)
 * @param {Object} app - تطبيق Express للحصول على io
 * @param {Object} data - بيانات الإشعار (userId, title, message, type, relatedId)
 */
const sendNotification = async (app, { userId, title, message, type, relatedId }) => {
    try {
        // 1. حفظ في قاعدة البيانات
        const notification = await Notification.create({
            user: userId,
            title,
            message,
            type: type || 'system',
            relatedId,
            isRead: false
        });

        // 2. إرسال عبر Socket.io (للمستخدم المتصل حالياً)
        const io = app.get('io');
        if (io) {
            io.to(userId.toString()).emit('new_notification', notification);
            logger.debug({ type, userId }, 'Notification sent to user');
        }

        // 3. إرسال FCM Push (للمستخدم حتى لو التطبيق مغلق)
        try {
            const user = await User.findById(userId).select('fcmToken');
            if (user && user.fcmToken) {
                await sendPush(user.fcmToken, title, message, {
                    type: type || 'system',
                    relatedId: relatedId ? relatedId.toString() : '',
                    notificationId: notification._id.toString()
                });
            }
        } catch (pushErr) {
            logger.error({ err: pushErr }, 'FCM push failed (non-critical)');
        }

        return notification;
    } catch (error) {
        logger.error({ err: error }, 'Error in sendNotification helper');
    }
};

module.exports = { sendNotification };
