import { initializeApp, getApps, getApp } from "firebase/app";
import { getAuth } from "firebase/auth";

const firebaseConfig = {
  apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
  authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
  projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
  storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
  messagingSenderId:
    process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
};

const app = getApps().length
  ? getApp()
  : initializeApp(firebaseConfig);

export const auth = getAuth(app);

// Guarded getter for Firebase Cloud Messaging — must never be called
// during SSR (no `window`/service-worker in that context), and
// `isSupported()` additionally rules out browsers that technically
// have `window` but lack IndexedDB/SW support (older Safari, some
// in-app browsers), matching Firebase's own recommended check.
export async function getFcmMessaging() {
  if (typeof window === "undefined") return null;

  const { getMessaging, isSupported } = await import("firebase/messaging");

  const supported = await isSupported().catch(() => false);
  if (!supported) return null;

  return getMessaging(app);
}

export default app;