import sys
sys.path.insert(0, "/var/www/html/metafoliadorv2")

import hashlib
import secrets
from datetime import datetime, timedelta, timezone
from base64 import b64encode, b64decode

import jwt
from cryptography.fernet import Fernet

MAIN_SECRET_KEY = "metafoliador_v2_main_jwt_secret_change_in_production"
MAIN_ALGORITHM = "HS256"
MAIN_ACCESS_TOKEN_EXPIRE_MINUTES = 480

_main_fernet_key = b64encode(hashlib.sha256(MAIN_SECRET_KEY.encode()).digest())
_main_fernet = Fernet(_main_fernet_key)


def main_hash_password(password: str) -> str:
    salt = secrets.token_hex(16)
    h = hashlib.sha256(f"{salt}{password}".encode()).hexdigest()
    return f"{salt}:{h}"


def main_verify_password(password: str, password_hash: str) -> bool:
    salt, h = password_hash.split(":", 1)
    return hashlib.sha256(f"{salt}{password}".encode()).hexdigest() == h


def main_create_access_token(data: dict) -> str:
    to_encode = data.copy()
    expire = datetime.now(timezone.utc) + timedelta(minutes=MAIN_ACCESS_TOKEN_EXPIRE_MINUTES)
    to_encode.update({"exp": expire})
    return jwt.encode(to_encode, MAIN_SECRET_KEY, algorithm=MAIN_ALGORITHM)


def main_decode_access_token(token: str) -> dict | None:
    try:
        return jwt.decode(token, MAIN_SECRET_KEY, algorithms=[MAIN_ALGORITHM])
    except jwt.PyJWTError:
        return None
