import { initializeApp, getApps, FirebaseApp } from 'firebase/app'; import { getAuth, Auth } from 'firebase/auth'; import { getFirestore, Firestore } from 'firebase/firestore'; import { getStorage, FirebaseStorage } 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, measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID, }; // Only initialize if we have the API key (skip during build and if no config) let _app: FirebaseApp | undefined; let _auth: Auth | undefined; let _db: Firestore | undefined; let _storage: FirebaseStorage | undefined; // Check if Firebase is properly configured const isFirebaseConfigured = firebaseConfig.apiKey && firebaseConfig.authDomain && firebaseConfig.projectId; if (isFirebaseConfigured && (typeof window !== 'undefined' || firebaseConfig.apiKey)) { try { // Initialize Firebase (client-side only, safe for browser) _app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0]; _auth = getAuth(_app); _db = getFirestore(_app); _storage = getStorage(_app); } catch (error) { console.warn('Firebase initialization skipped - no credentials configured'); } } else { console.warn('Firebase not configured - using PostgreSQL backend'); } // Export with type assertions - these will be defined at runtime in the browser // During build, they may be undefined, but won't be accessed export const auth = _auth as Auth; export const db = _db as Firestore; export const storage = _storage as FirebaseStorage; export default _app;