#!/usr/bin/env python3
"""
Script pour vérifier la balance actuelle et les calculs de position
"""

from hyperliquid_client import HyperliquidClient
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def check_balance_and_sizes():
    """Vérifie la balance et les calculs de tailles de position"""

    client = HyperliquidClient()

    # Récupérer la balance
    account_state = client.get_account_state()
    if account_state and 'marginSummary' in account_state:
        margin_summary = account_state['marginSummary']
        account_value = float(margin_summary.get('accountValue', 0))
        total_raw = float(margin_summary.get('totalRawUsd', 0))

        logger.info(f"Balance totale: ${account_value:.2f}")
        logger.info(f"Balance disponible: ${total_raw:.2f}")
    else:
        logger.error("Impossible de récupérer la balance")
        return

    # Configuration actuelle
    position_size_pct = 0.10  # 10%
    max_positions = 10

    # Calculs actuels
    base_position_size = account_value * position_size_pct

    logger.info(f"\n=== CALCULS ACTUELS ===")
    logger.info(f"Position size %: {position_size_pct*100}%")
    logger.info(f"Max positions: {max_positions}")
    logger.info(f"Taille par position: ${base_position_size:.2f}")
    logger.info(f"Exposition totale max: ${base_position_size * max_positions:.2f}")
    logger.info(f"% du capital total: {(base_position_size * max_positions / account_value)*100:.1f}%")

    # Positions actuelles
    positions = client.get_positions()
    logger.info(f"\n=== POSITIONS ACTUELLES ===")
    logger.info(f"Nombre de positions: {len(positions)}")

    total_notional = 0
    for pos in positions:
        symbol = pos.get('symbol', '').replace('-PERP', '')
        size = abs(float(pos.get('size', 0)))
        entry_price = float(pos.get('entry_price', 0))
        leverage_data = pos.get('leverage', {})
        leverage = leverage_data.get('value', 1) if isinstance(leverage_data, dict) else leverage_data

        notional = size * entry_price
        total_notional += notional

        logger.info(f"  {symbol:6} - Size: {size:8.3f} - Notional: ${notional:8.2f} - Leverage: {leverage}x")

    logger.info(f"\nExposition totale actuelle: ${total_notional:.2f}")
    logger.info(f"% du capital utilisé: {(total_notional / account_value)*100:.1f}%")

    # Calcul recommandé (balance / nb positions max)
    recommended_size = account_value / max_positions

    logger.info(f"\n=== NOUVEAU CALCUL RECOMMANDÉ ===")
    logger.info(f"Taille fixe par position: ${recommended_size:.2f}")
    logger.info(f"Amélioration: +{((recommended_size/base_position_size)-1)*100:.1f}%")

if __name__ == "__main__":
    check_balance_and_sizes()