"""Utilitaires de sécurité pour l'authentification.

Ce module contient les fonctions de hashing et vérification des mots de passe.
"""

from passlib.hash import bcrypt
import secrets


def hash_password(password: str) -> str:
    """Hash un mot de passe avec bcrypt.
    
    Args:
        password: Mot de passe en clair.
    
    Returns:
        Mot de passe hashé.
    """
    return bcrypt.hash(password)


def verify_password(password: str, hashed_password: str) -> bool:
    """Vérifie un mot de passe contre son hash.
    
    Args:
        password: Mot de passe en clair.
        hashed_password: Hash du mot de passe.
    
    Returns:
        True si le mot de passe correspond, False sinon.
    """
    return bcrypt.verify(password, hashed_password)


def generate_token(length: int = 32) -> str:
    """Génère un token aléatoire sécurisé.
    
    Utilisé pour les tokens de vérification email et reset password.
    
    Args:
        length: Longueur du token en bytes.
    
    Returns:
        Token en hexadécimal.
    """
    return secrets.token_urlsafe(length)

