#!/usr/bin/env python3
"""
Test script to verify Hyperliquid balance fetching with CCXT
"""

import sys
import os
from pathlib import Path

# Add the project root and src directory to the path
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))
sys.path.insert(0, str(project_root / 'src'))

from hyperliquid_client import HyperliquidClient
from config import Config

def test_balance():
    """Test balance fetching functionality."""
    print("๐Ÿงช Testing Hyperliquid Balance Fetching")
    print("=" * 50)
    
    try:
        # Validate configuration first
        print("๐Ÿ” Validating configuration...")
        if not Config.validate():
            print("โŒ Configuration validation failed!")
            return False
        
        print(f"โœ… Configuration valid")
        print(f"๐ŸŒ Network: {'Testnet' if Config.HYPERLIQUID_TESTNET else 'Mainnet'}")
        print(f"๐Ÿ”‘ Private Key: {Config.HYPERLIQUID_PRIVATE_KEY[:10]}..." if Config.HYPERLIQUID_PRIVATE_KEY else "โŒ No private key")
        print()
        
        # Initialize client
        print("๐Ÿ”ง Initializing Hyperliquid client...")
        client = HyperliquidClient(use_testnet=Config.HYPERLIQUID_TESTNET)
        
        if not client.sync_client:
            print("โŒ Failed to initialize client!")
            return False
        
        print("โœ… Client initialized successfully")
        print()
        
        # Test balance fetching
        print("๐Ÿ’ฐ Fetching account balance...")
        balance = client.get_balance()
        
        if balance:
            print("โœ… Balance fetch successful!")
            print("๐Ÿ“Š Balance data:")
            
            # Pretty print the balance
            if isinstance(balance, dict):
                for key, value in balance.items():
                    if isinstance(value, dict):
                        print(f"  {key}:")
                        for sub_key, sub_value in value.items():
                            print(f"    {sub_key}: {sub_value}")
                    else:
                        print(f"  {key}: {value}")
            else:
                print(f"  Raw balance: {balance}")
                
            return True
        else:
            print("โŒ Balance fetch failed! Trying alternative method...")
            print()
            
            # Try alternative method
            print("๐Ÿ”„ Testing alternative balance fetching approaches...")
            balance_alt = client.get_balance_alternative()
            
            if balance_alt:
                print("โœ… Alternative balance fetch successful!")
                print("๐Ÿ“Š Balance data:")
                
                # Pretty print the balance
                if isinstance(balance_alt, dict):
                    for key, value in balance_alt.items():
                        if isinstance(value, dict):
                            print(f"  {key}:")
                            for sub_key, sub_value in value.items():
                                print(f"    {sub_key}: {sub_value}")
                        else:
                            print(f"  {key}: {value}")
                else:
                    print(f"  Raw balance: {balance_alt}")
                    
                return True
            else:
                print("โŒ Alternative balance fetch also failed!")
                return False
            
    except Exception as e:
        print(f"๐Ÿ’ฅ Test failed with error: {e}")
        import traceback
        print("๐Ÿ“œ Full traceback:")
        traceback.print_exc()
        return False

if __name__ == "__main__":
    success = test_balance()
    
    if success:
        print("\n๐ŸŽ‰ Balance test PASSED!")
        sys.exit(0)
    else:
        print("\n๐Ÿ’ฅ Balance test FAILED!")
        sys.exit(1)