import { initializeApp, getApps } from "firebase/app"; import { getMessaging, getToken, onMessage } from "firebase/messaging"; 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", }; // Initialize Firebase (avoid duplicate init in SSR) const app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0]; // Get messaging instance (only works in browser) let messaging = null; if (typeof window !== "undefined" && "serviceWorker" in navigator) { try { messaging = getMessaging(app); } catch (e) { console.warn("[Firebase] Messaging init failed:", e.message); } } // Request notification permission and get FCM token export async function requestNotificationPermission() { if (typeof window === "undefined") return null; try { const permission = await Notification.requestPermission(); if (permission !== "granted") { console.log("[FCM] Notification permission denied"); return null; } const registration = await navigator.serviceWorker.register("/firebase-messaging-sw.js"); const token = await getToken(messaging, { vapidKey: "BGZ4Fo8rRhoTdStLGlCySDZOnAX4ekCA0e3HDWXL5uEi2kOnXynYjbaDbY15002phUrFqxBpPPFHgfH2VhrmFDU", serviceWorkerRegistration: registration, }); console.log("[FCM] Token:", token); // Send token to backend if (token) { try { const authToken = localStorage.getItem("auth_token"); if (authToken) { const apiBase = process.env.NEXT_PUBLIC_API_URL || "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, deviceType: 2 }), // 2 = Web }); console.log("[FCM] Token sent to backend"); } } catch (err) { console.error("[FCM] Failed to send token to backend:", err); } } return token; } catch (err) { console.error("[FCM] Error getting token:", err); return null; } } // Listen for foreground messages export function onForegroundMessage(callback) { if (!messaging) return () => {}; return onMessage(messaging, (payload) => { console.log("[FCM] Foreground message:", payload); callback(payload); }); } export { app, messaging };