import { getApp, getApps, initializeApp } from 'firebase/app' import { getAuth } from 'firebase/auth' import { getFirestore } from 'firebase/firestore' import { getStorage } from 'firebase/storage' 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 requiredFirebaseConfig = [ ['NEXT_PUBLIC_FIREBASE_API_KEY', firebaseConfig.apiKey], ['NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN', firebaseConfig.authDomain], ['NEXT_PUBLIC_FIREBASE_PROJECT_ID', firebaseConfig.projectId], ['NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET', firebaseConfig.storageBucket], ['NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID', firebaseConfig.messagingSenderId], ['NEXT_PUBLIC_FIREBASE_APP_ID', firebaseConfig.appId], ] as const function getMissingFirebaseConfig() { return requiredFirebaseConfig .filter(([, value]) => !value) .map(([key]) => key) } function getFirebaseApp() { const missingConfig = getMissingFirebaseConfig() if (missingConfig.length > 0) { throw new Error(`Firebase is not configured. Missing: ${missingConfig.join(', ')}`) } return getApps().length ? getApp() : initializeApp(firebaseConfig) } export function getFirebaseAuth() { return getAuth(getFirebaseApp()) } export function getFirebaseDb() { return getFirestore(getFirebaseApp()) } export function getFirebaseStorage() { return getStorage(getFirebaseApp()) }