import logging
import asyncio
from functools import wraps

logger = logging.getLogger("core.voice.recovery")

def retry_connection(max_retries=3, delay=1.0):
    """
    Decorator to retry async connection methods.
    """
    def decorator(func):
        @wraps(func)
        async def wrapper(*args, **kwargs):
            retries = 0
            while retries < max_retries:
                try:
                    return await func(*args, **kwargs)
                except Exception as e:
                    retries += 1
                    logger.warning(f"Connection failed (Attempt {retries}/{max_retries}): {e}")
                    if retries >= max_retries:
                        logger.error("Max retries reached. Connection abandoned.")
                        raise
                    await asyncio.sleep(delay * retries)
            return None
        return wrapper
    return decorator
