"use client"; import { useEffect, useState, useRef } from "react"; import { initializeApp, getApps } from "firebase/app"; import { getMessaging, getToken, onMessage } from "firebase/messaging"; import AuthService from "../services/AuthService"; const firebaseConfig = { apiKey: "AIzaSyBZV7KBLRJSTApahfrO8lBesmIM3zNRSaY", authDomain: "sweet-home-b2766.firebaseapp.com", projectId: "sweet-home-b2766", storageBucket: "sweet-home-b2766.firebasestorage.app", messagingSenderId: "602865114600", appId: "1:602865114600:web:ed9b6754940507a6ab585d", measurementId: "G-M2V95NBJLX", }; const app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0]; export default function NotificationHandler() { const [notification, setNotification] = useState(null); const [showPrompt, setShowPrompt] = useState(false); const initialized = useRef(false); useEffect(() => { const timer = setTimeout(() => { if (initialized.current) return; initialized.current = true; if (!AuthService.getToken()) return; if ("Notification" in window) { if (Notification.permission === "default") { setShowPrompt(true); } else if (Notification.permission === "granted") { setupFCM(); } } }, 1000); return () => clearTimeout(timer); }, []); async function setupFCM() { try { const registration = await navigator.serviceWorker.register("/firebase-messaging-sw.js"); const messaging = getMessaging(app); const fcmToken = await getToken(messaging, { vapidKey: "BGZ4Fo8rRhoTdStLGlCySDZOnAX4ekCA0e3HDWXL5uEi2kOnXynYjbaDbY15002phUrFqxBpPPFHgfH2VhrmFDU", serviceWorkerRegistration: registration, }); if (fcmToken) { console.log("[FCM] Token:", fcmToken.substring(0, 20) + "..."); const authToken = AuthService.getToken(); if (authToken) { const apiBase = "https://45.93.137.91.nip.io/api"; await fetch(`${apiBase}/User/SetFCMToken`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${authToken}`, }, body: JSON.stringify({ token: fcmToken, deviceType: 2 }), }); console.log("[FCM] Token sent to backend"); } } onMessage(messaging, (payload) => { const title = payload.notification?.title || payload.data?.title || "Sweet Home"; const body = payload.notification?.body || payload.data?.body || ""; setNotification({ title, body }); setTimeout(() => setNotification(null), 5000); }); } catch (err) { console.error("[FCM] Setup error:", err); } } async function handleEnable() { setShowPrompt(false); // This MUST be synchronous from a user gesture const permission = await Notification.requestPermission(); console.log("[FCM] Permission result:", permission); if (permission === "granted") { await setupFCM(); } } return ( <> {showPrompt && (
تفعيل الإشعارات
اسمح بالإشعارات للبقاء على اطلاع بحجوزاتك وعروضنا.
{notification.title}
{notification.body}