// Import the functions you need from the SDKs you need
import { initializeApp } from 'firebase/app';
import { getMessaging, getToken, type Messaging } from 'firebase/messaging';
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
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,
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);

let messagingInstance: Messaging | null = null;
export const getBrowserMessaging = (): Messaging | null => {
    if (typeof window === 'undefined') return null;
    if (!messagingInstance) {
        try {
            messagingInstance = getMessaging(app);
        } catch {
            messagingInstance = null;
        }
    }
    return messagingInstance;
};

export const generateToken = async (): Promise<string | null> => {
    if (typeof window === 'undefined' || !('Notification' in window)) return null;
    try {
        const permission = await Notification.requestPermission();
        if (permission !== 'granted') return null;
        const messaging = getBrowserMessaging();
        if (!messaging) return null;
        const token = await getToken(messaging, {
            vapidKey: process.env.NEXT_PUBLIC_FIREBASE_VAPID_KEY as string,
        });
        return token ?? null;
    } catch (err) {
        return null;
    }
};
