# from passlib.context import CryptContext
# from jose import jwt, JWTError
# import os
# from datetime import datetime, timedelta
# import hashlib
# from dotenv import load_dotenv
# load_dotenv()

# pwd_context = CryptContext(schemes=["bcrypt"], deprecated = "auto")
# SECRET_KEY = os.getenv("SECRET_KEY")
# ALGORITHM = "HS256"
# # ACCESS_TOKEN_EXPIRE_MINUTES = 30
 

# def hash_password(password: str):
#     hashed = hashlib.sha256(password.encode()).hexdigest()
#     return pwd_context.hash(hashed)

# def verify_password(password: str, hashed: str):
#     hashed_input = hashlib.sha256(password.encode()).hexdigest() 
#     return pwd_context.verify(hashed_input, hashed)

# def create_access_token(data: dict): 
#     to_encode = data.copy()
#     expire = datetime.utcnow() + timedelta(hours=24)

#     to_encode.update({"exp": expire})

#     return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM    )


# def verify_token(token: str): 
#     try: 
#         payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
#         return payload
#     except JWTError: 
#         return None



from passlib.context import CryptContext

from jose import jwt, JWTError

from datetime import datetime, timedelta

import hashlib

from app.core.config import settings


pwd_context = CryptContext(
    schemes=["bcrypt"],
    deprecated="auto"
)

ALGORITHM = "HS256"


def hash_password(password: str):

    hashed = hashlib.sha256(
        password.encode()
    ).hexdigest()

    return pwd_context.hash(hashed)


def verify_password(
    password: str,
    hashed: str
):

    hashed_input = hashlib.sha256(
        password.encode()
    ).hexdigest()

    return pwd_context.verify(
        hashed_input,
        hashed
    )


def create_access_token(data: dict):

    to_encode = data.copy()

    expire = datetime.utcnow() + timedelta(
        hours=24
    )

    to_encode.update({
        "exp": expire,
        "type": "access"
    })

    return jwt.encode(
        to_encode,
        settings.SECRET_KEY,
        algorithm=ALGORITHM
    )


def verify_token(token: str):

    try:

        payload = jwt.decode(
            token,
            settings.SECRET_KEY,
            algorithms=[ALGORITHM]
        )

        return payload

    except JWTError:
        return None