import { initializeApp, getApps } from 'firebase/app';
import { getAuth, GoogleAuthProvider, setPersistence, browserLocalPersistence } from 'firebase/auth';
import { getFirestore, connectFirestoreEmulator } from 'firebase/firestore';

const firebaseConfig = {
    apiKey: import.meta.env.VITE_FIREBASE_API_KEY,
    authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN,
    projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID,
    storageBucket: import.meta.env.VITE_FIREBASE_STORAGE_BUCKET,
    messagingSenderId: import.meta.env.VITE_FIREBASE_MESSAGING_SENDER_ID,
    appId: import.meta.env.VITE_FIREBASE_APP_ID,
};

export const isFirebaseConfigured = Boolean(
    firebaseConfig.apiKey &&
    firebaseConfig.authDomain &&
    firebaseConfig.projectId &&
    firebaseConfig.apiKey !== 'undefined' &&
    firebaseConfig.authDomain !== 'undefined' &&
    firebaseConfig.projectId !== 'undefined'
);

let app;
let auth;
let db;
let googleProvider;

if (isFirebaseConfigured) {
    app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0];
    auth = getAuth(app);
    setPersistence(auth, browserLocalPersistence);
    db = getFirestore(app);
    googleProvider = new GoogleAuthProvider();

    // Connect to emulator in development
    const isLocalhost = typeof window !== 'undefined' &&
        (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1');

    if (isLocalhost && !db._settings?.host?.includes('localhost')) {
        try {
            connectFirestoreEmulator(db, 'localhost', 5003);
            console.log('🔥 Connected to Firestore emulator on localhost:5003');
        } catch (error) {
            console.log('⚠️ Firestore emulator already connected or connection failed');
        }
    }

    console.log('🔥 Firebase initialized successfully');
} else {
    auth = null;
    db = null;
    googleProvider = null;
    console.log('⚠️ Firebase not configured - missing environment variables');
}

export { auth, db, googleProvider };
