from datetime import datetime, timedelta
from django.utils import timezone
from user.models import User

def has_tokens(user: User) -> bool:
    """
    Vérifie si l'utilisateur peut encore utiliser des tokens.
    
    Args:
        user (User): L'utilisateur à vérifier
        
    Returns:
        bool: True si l'utilisateur peut utiliser des tokens, False sinon
    """
    
    # Vérifie si la période de validité des tokens est écoulée
    print("user.tokens_reset_date : ", user.tokens_reset_date)
    print("timezone.now() : ", timezone.now())
    if (not user.tokens_reset_date) or user.tokens_reset_date < timezone.now():
        return False
    
    # Vérifie si l'utilisateur a dépassé sa limite
    print("user.tokens_used : ", user.tokens_used)
    print("user.tokens_limit : ", user.tokens_limit)
    return user.tokens_used < user.tokens_limit

def add_tokens_used(user: User, tokens_count: int) -> None:
    """
    Ajoute le nombre de tokens utilisés au total de l'utilisateur.
    
    Args:
        user (User): L'utilisateur concerné
        tokens_count (int): Le nombre de tokens à ajouter
    """
    user.tokens_used += tokens_count
    user.save()
    print(f"Tokens utilisés: {user.tokens_used}")

def reset_user_tokens(user: User, reset_date: datetime) -> None:
    """
    Réinitialise les compteurs de tokens de l'utilisateur.
    
    Args:
        user (User): L'utilisateur dont il faut réinitialiser les compteurs
    """
    user.tokens_used = 0
    user.tokens_reset_date = reset_date
    user.save()