"""Firebase Admin SDK integration for token verification."""

from typing import Optional

import firebase_admin
from django.conf import settings
from firebase_admin import auth, credentials

_app = None


def get_firebase_app():
    """Initialize Firebase app (singleton)."""
    global _app
    if _app is None:
        try:
            cred = credentials.Certificate(settings.FIREBASE_CREDENTIALS_PATH)
            _app = firebase_admin.initialize_app(cred)
        except (ValueError, FileNotFoundError):
            # If already initialized or file not found in dev
            try:
                _app = firebase_admin.get_app()
            except ValueError:
                _app = None
    return _app


def verify_firebase_token(id_token: str) -> Optional[dict]:
    """
    Verify a Firebase ID token and return decoded claims.
    Returns None if verification fails.
    """
    app = get_firebase_app()
    if app is None:
        return None
    try:
        decoded = auth.verify_id_token(id_token, app=app)
        return decoded
    except (auth.InvalidIdTokenError, auth.ExpiredIdTokenError, Exception):
        return None
