import { getFcmMessaging } from "./firebase";

/*
* Account-type-agnostic: resolves a browser FCM registration token, or
* null if permission is denied/unsupported/anything goes wrong. Never
* throws — a push-permission failure must not break the surrounding
* login/signup flow that calls this.
*/
export async function requestFcmToken(): Promise<string | null> {
  try {
    if (typeof window === "undefined" || !("Notification" in window)) {
      return null;
    }

    const permission = await Notification.requestPermission();
    if (permission !== "granted") return null;

    const messaging = await getFcmMessaging();
    if (!messaging) return null;

    const registration = await navigator.serviceWorker.register(
      "/firebase-messaging-sw.js"
    );

    const { getToken } = await import("firebase/messaging");

    return await getToken(messaging, {
      vapidKey: process.env.NEXT_PUBLIC_FIREBASE_VAPID_KEY,
      serviceWorkerRegistration: registration,
    });
  } catch (error) {
    console.warn("Unable to obtain FCM token:", error);
    return null;
  }
}
