from fastapi.responses import JSONResponse
from jose import jwt
from jose.exceptions import JOSEError
from fastapi import Depends
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from .utils import mongodb_connect

security = HTTPBearer()


mongodb_client = mongodb_connect()

async def has_access(credentials: HTTPAuthorizationCredentials= Depends(security)):
    """
        Function that is used to validate the token in the case that it requires it
    """
    token = credentials.credentials

    try:
        payload = jwt.decode(token, key='secret', options={"verify_signature": False,
                                                           "verify_aud": False,
                                                           "verify_iss": False})
        return payload
    except JOSEError as e:  # catches any exception
        return JSONResponse(content={"status": "failed", "message": str(e)}, status_code=401)
        

