import os
import firebase_admin
from firebase_admin import auth as firebase_auth
from firebase_admin import credentials
from rest_framework import authentication, exceptions
from django.contrib.auth.models import User
from django.utils import timezone

if not firebase_admin._apps:
    cred = credentials.Certificate("./serviceAccountKey.json")
    default_app = firebase_admin.initialize_app(cred)

class FirebaseAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        auth_header = request.META.get("HTTP_AUTHORIZATION")
        if not auth_header:
            pass
            # raise NoAuthToken("No auth token provided")

        id_token = auth_header.split(" ").pop()
        decoded_token = None
        try:
            decoded_token = firebase_auth.verify_id_token(id_token)
        except Exception:
            pass
            # raise InvalidAuthToken("Invalid auth token")

        if not id_token or not decoded_token:
            return None

        try:
            uid = decoded_token.get("uid")
        except Exception:
            pass
            # raise FirebaseError()

        user, created = User.objects.get_or_create(username=uid)
        return (user, None)