#
# Erminig - Décorateur pour relancer un téléchargement
# Copyright (C) 2025 L0m1g
# Sous licence DOUARN - Voir le fichier LICENCE pour les détails
#
# Ce fichier fait partie du projet Erminig.
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
#


import time
import requests
from erminig.core.config import Config


def retry_on_failure():
    def decorator(func):
        def wrapper(*args, **kwargs):
            attempt = 1
            while attempt <= Config.RETRY_MAX_ATTEMPTS + 1:
                try:
                    return func(*args, **kwargs)
                except requests.exceptions.RequestException as e:
                    name = getattr(args[0], "name", "Unknown")
                    print(
                        f"[{name}] Erreur réseau tentative {attempt}: {e.__class__.__name__}"
                    )
                    if attempt <= Config.RETRY_MAX_ATTEMPTS:
                        print(
                            f"[{name}] Nouvelle tentative dans {Config.RETRY_DELAY_SECONDS}s..."
                        )
                        time.sleep(Config.RETRY_DELAY_SECONDS)
                        attempt += 1
                    else:
                        print(f"[{name}] Abandon après {attempt} tentatives.")
                        return None
                except Exception as e:
                    name = getattr(args[0], "name", "Unknown")
                    print(f"[{name}] Erreur inconnue dans {func.__name__}: {e}")
                    return None

        return wrapper

    return decorator
