from google.auth.transport import requests
from google.oauth2 import id_token

from app.config.Config import settings


def verify_google_token(token: str):

    try:

        google_user = id_token.verify_oauth2_token(
            token,
            requests.Request(),
            settings.GOOGLE_CLIENT_ID
        )

        # Google token ka issuer verify
        issuer = google_user.get("iss")

        if issuer not in [
            "accounts.google.com",
            "https://accounts.google.com"
        ]:
            return None

        # Google ka unique user ID
        google_id = google_user.get("sub")

        # Email
        email = google_user.get("email")

        # Google account verified hai ya nahi
        email_verified = google_user.get(
            "email_verified",
            False
        )

        if not google_id:
            return None

        if not email:
            return None

        if not email_verified:
            return None

        return {
            "google_id": google_id,
            "email": email,
            "name": google_user.get("name"),
            "profile_image": google_user.get("picture")
        }

    except ValueError:
        return None