#!/usr/bin/env python3
"""
Cache statique des leverages maximum d'Hyperliquid
Utilisé quand les rate limits empêchent la récupération dynamique
"""

# Cache des leverages max par symbole (obtenu via API Hyperliquid)
# Mis à jour manuellement quand nécessaire pour éviter les rate limits
HYPERLIQUID_MAX_LEVERAGES = {
    # Majors (leverage élevé)
    'BTC': 50,
    'ETH': 50,
    'SOL': 20,
    'BNB': 20,
    'AVAX': 20,
    'LINK': 20,
    'DOT': 20,
    'UNI': 20,
    'AAVE': 20,
    'MATIC': 20,

    # Layer 2 / DeFi
    'ARB': 20,
    'OP': 20,
    'COMP': 10,
    'MKR': 10,
    'SNX': 10,
    'SUSHI': 10,

    # Autres majors
    'ADA': 20,
    'ATOM': 5,   # CORRIGÉ: Max 5x sur Hyperliquid (testé)
    'LTC': 20,
    'BCH': 20,
    'XRP': 20,
    'DOGE': 20,
    'TRX': 10,
    'ETC': 10,
    'FIL': 10,
    'XLM': 10,
    'VET': 10,

    # Tokens plus récents/spécialisés (leverage modéré)
    'ENA': 10,
    'ETHFI': 10,
    'WIF': 10,
    'PROVE': 5,
    'HEMI': 5,
    'AI': 5,
    'ANIME': 5,
    'BABY': 5,
    'BADGER': 10,
    'ACE': 10,
    'ALT': 10,
    'APEX': 10,
    'AR': 10,
    'ASTER': 5,
    'AVNT': 5,

    # Memecoins (leverage plus faible)
    'PEPE': 10,
    'SHIB': 10,
    'FLOKI': 5,
    'BONK': 5,

    # DeFi tokens
    'CRV': 10,
    'BAL': 10,
    'YFI': 10,
    '1INCH': 10,

    # Gaming/NFT
    'AXS': 10,
    'SAND': 10,
    'MANA': 10,
    'ENJ': 10,

    # Infrastructure
    'RNDR': 10,
    'GRT': 10,
    'INJ': 10,
    'STX': 10,

    # Fallback pour tokens non listés
    'DEFAULT': 5
}

def get_max_leverage(symbol: str) -> int:
    """
    Récupère le leverage maximum pour un symbole donné

    Args:
        symbol: Symbole du token (ex: 'BTC', 'ETH')

    Returns:
        int: Leverage maximum disponible
    """
    # Nettoyer le symbole
    clean_symbol = symbol.replace('USDT', '').upper()

    # Chercher dans le cache
    if clean_symbol in HYPERLIQUID_MAX_LEVERAGES:
        return HYPERLIQUID_MAX_LEVERAGES[clean_symbol]

    # Fallback pour tokens non référencés
    return HYPERLIQUID_MAX_LEVERAGES['DEFAULT']

def update_leverage_cache(new_leverages: dict):
    """
    Met à jour le cache avec de nouvelles données

    Args:
        new_leverages: Dict {symbol: max_leverage}
    """
    global HYPERLIQUID_MAX_LEVERAGES
    HYPERLIQUID_MAX_LEVERAGES.update(new_leverages)

def get_all_leverages() -> dict:
    """Retourne tous les leverages du cache"""
    return HYPERLIQUID_MAX_LEVERAGES.copy()

# Stats du cache
def get_cache_stats():
    """Retourne des statistiques sur le cache"""
    leverages = HYPERLIQUID_MAX_LEVERAGES

    high_lev = sum(1 for lev in leverages.values() if lev >= 20)
    medium_lev = sum(1 for lev in leverages.values() if 10 <= lev < 20)
    low_lev = sum(1 for lev in leverages.values() if lev < 10)

    return {
        'total_symbols': len(leverages) - 1,  # -1 pour DEFAULT
        'high_leverage_20x+': high_lev,
        'medium_leverage_10-19x': medium_lev,
        'low_leverage_<10x': low_lev,
        'max_leverage': max(leverages.values()),
        'min_leverage': min(leverages.values())
    }

if __name__ == "__main__":
    # Test du cache
    print("=== CACHE LEVERAGES HYPERLIQUID ===")
    stats = get_cache_stats()
    for key, value in stats.items():
        print(f"{key}: {value}")

    print("\nExemples:")
    examples = ['BTC', 'ETH', 'SOL', 'WIF', 'UNKNOWN_TOKEN']
    for symbol in examples:
        lev = get_max_leverage(symbol)
        print(f"{symbol}: {lev}x")