import { initializeApp } from "firebase/app";
import { MessagePayload, getMessaging, getToken, isSupported, onMessage } from "firebase/messaging";

const firebaseConfig = {
  apiKey: "AIzaSyCEboVAhJsyIvpL7AFzbu6GVscLrEDan9I",
  authDomain: "basekcall-5fcf0.firebaseapp.com",
  projectId: "basekcall-5fcf0",
  storageBucket: "basekcall-5fcf0.firebasestorage.app",
  messagingSenderId: "541865336054",
  appId: "1:541865336054:web:e37bfb310f7f4c165720d7",
  measurementId: "G-PLPHCTHJ33"
};
// Initialize Firebase
const firebaseApp = initializeApp(firebaseConfig);


export const getFirebaseMessageToken = async () => {
  const isSupport = await isSupported();
  if (isSupport) {
    const messaging = getMessaging(firebaseApp);
    try {
      let registration;
      if (typeof window !== "undefined" && "serviceWorker" in navigator) {
        registration = await navigator.serviceWorker.getRegistration();
      }
      let tokenId = await getToken(messaging, {
        vapidKey: 'BKki6vYng-2Fx3kws9YWoFnwsVMN4xg23uqIku4qQBM20nPfloVCytRlDxqQXHDQXkkLGWjJqBqsNFu_DjrJ-oc',
        serviceWorkerRegistration: registration,
      });
      return tokenId;
    } catch (error) {
      return '';
    }
  }
  return '';
};


export const onMessageListener = (setNotificationData: (data: any) => void) => {
  try {
    if ("serviceWorker" in navigator && typeof window !== "undefined" && "Notification" in window) {
      const fcmmessaging = getMessaging(firebaseApp);

      const unsubscribe = onMessage(fcmmessaging, (payload: any) => {
        setNotificationData(payload);
      });

      return () => unsubscribe();
    }
  } catch (error) {
    console.error('Error in onMessageListener:', error);
  }
};

export default firebaseApp