import { initializeApp, getApps, getApp } from "firebase/app"; import { getAuth } from "firebase/auth"; import { getDatabase } from "firebase/database"; // As variáveis de ambiente devem ser configuradas no Vercel e no ficheiro .env.local 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, databaseURL: process.env.NEXT_PUBLIC_FIREBASE_DATABASE_URL || "https://namesa-429c1-default-rtdb.firebaseio.com" }; // Validate that all required environment variables are present const requiredEnvVars = [ "NEXT_PUBLIC_FIREBASE_API_KEY", "NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN", "NEXT_PUBLIC_FIREBASE_PROJECT_ID", "NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET", "NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID", "NEXT_PUBLIC_FIREBASE_APP_ID", ]; const missingVars = requiredEnvVars.filter( (key) => !process.env[key] ); if (missingVars.length > 0) { console.error( "[Firebase] Missing environment variables:", missingVars.join(", "), "\nPlease ensure all Firebase environment variables are set in .env.local or your hosting platform." ); } // Initialize Firebase only once — prevents duplicate app errors in development (HMR) and SSR let app; try { app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApp(); } catch (error: any) { if (error?.code === "app/duplicate-app") { app = getApp(); } else { throw new Error( `[Firebase] Failed to initialize: ${error?.message || "Unknown error"}. Check your environment variables.` ); } } export const auth = getAuth(app); export const db = getDatabase(app); export default app;