from models.modules.core import request, InvalidUsage
import jwt
import datetime
from functools import wraps

def getUserInfoFromToken():
    auth = request.headers.get('Authorization')
    token = auth.split(' ')[1]
    return jwt.decode(token, app.config['SECRET_KEY'])

def validate_token(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        auth = request.headers.get('Authorization')
        if not auth:
            return {
                "error": "authorization required. access forbidden"
            }
        
        token = auth.split(' ')[1]
        
        if not token:
            return {
                "error": "bad request. missing token"
            }

        try: 
            data = jwt.decode(token, app.config['SECRET_KEY'])
        except Exception as e:
            return {
                "error": "Token is invalid " + str(e)
            }
        
        return f(*args, **kwargs)
    return decorated

def generatejwt(data): 
        token = jwt.encode({
            'user': data,
            'exp': datetime.datetime.now() + datetime.timedelta(minutes=15000)
        }, app.config['SECRET_KEY'])
        return token.decode('UTF-8')
        
def regenratejwt():
    print("regenerate your jwt")

def devaluejwt():
    auth = request.headers.get('Authorization')
    token = auth.split(' ')[1]
    print("devalue jwt")