"""
Test du ProfitTaker Worker
"""

import sys
import os
sys.path.append('..')

from profit_taker import ProfitTaker
from hyperliquid_client import HyperliquidClient
import time

# Fix encoding for Windows console
sys.stdout.reconfigure(encoding='utf-8')

def test_profit_taker():
    """Test du ProfitTaker avec données réelles"""

    print("=== TEST PROFIT TAKER ===")

    # Initialiser le client Hyperliquid
    try:
        hyperliquid_client = HyperliquidClient()
        print("Client Hyperliquid initialise")
    except Exception as e:
        print(f"Erreur client Hyperliquid: {e}")
        return

    # Initialiser le ProfitTaker
    profit_taker = ProfitTaker(hyperliquid_client=hyperliquid_client)
    print("ProfitTaker initialise")

    # Test 1: Récupération des fills
    print("\n--- Test 1: Récupération des fills ---")
    fills = profit_taker.get_fills_from_hyperliquid(lookback_hours=24)
    print(f"Fills récupérés: {len(fills)}")

    if fills:
        print("Exemple de fill:")
        print(f"  {fills[0]}")

    # Test 2: Récupération des positions actuelles
    print("\n--- Test 2: Positions actuelles ---")
    positions = profit_taker.get_current_positions_from_hyperliquid()
    print(f"Positions actuelles: {len(positions)}")

    if positions:
        print("Positions détectées:")
        for pos in positions:
            symbol = pos.get('symbol', '').replace('-PERP', '')
            side = pos.get('side', '')
            size = pos.get('size', 0)
            pnl = pos.get('unrealized_pnl', 0)
            print(f"  {symbol} {side}: Size={size}, PnL=${pnl}")
        print("Structure position exemple:")
        print(f"  {list(positions[0].keys())}")
        print("Exemple position complète:")
        print(f"  Entry price: {positions[0].get('entry_price')}")
        print("Test des prix de marché:")
        for pos in positions:
            symbol = pos.get('symbol', '').replace('-PERP', '')
            side = pos.get('side', '')
            entry_price = pos.get('entry_price', 0)
            market_price = hyperliquid_client.get_current_market_price(symbol)
            print(f"  {symbol} {side}: Entry=${entry_price}, Market=${market_price}")

    # Test 3: Reconstruction des trades
    print("\n--- Test 3: Reconstruction des trades ---")
    reconstructed = profit_taker.reconstruct_trades_from_fills(fills)
    print(f"Trades reconstruits: {len(reconstructed)}")

    for key, trade in reconstructed.items():
        print(f"  {key}:")
        print(f"    Ouvertures: {len(trade['opens'])}, Total: {trade['total_opened']:.6f}")
        print(f"    Fermetures: {len(trade['closes'])}, Total: {trade['total_closed']:.6f}")
        print(f"    Taille actuelle: {trade['current_size']:.6f}")
        print(f"    Prix moyen: ${trade['avg_open_price']:.4f}")

    # Test 4: Synchronisation complète
    print("\n--- Test 4: Synchronisation complète ---")
    active_positions = profit_taker.sync_with_current_positions(reconstructed, positions)
    print(f"Positions actives synchronisées: {len(active_positions)}")

    for key, pos in active_positions.items():
        print(f"  {key}:")
        print(f"    Entry: ${pos['entry_price']:.4f}")
        print(f"    Current: ${pos['current_price']:.4f}")
        print(f"    Size: {pos['current_size']:.6f}")
        print(f"    PnL: {pos['pnl_percent']:.2f}%")
        print(f"    Leverage: {pos['leverage']}x")

    # Test 5: Mise à jour complète
    print("\n--- Test 5: Mise à jour complète ---")
    profit_taker.update_active_positions()

    summary = profit_taker.get_positions_summary()
    print(f"Résumé final: {summary['total_positions']} positions")

    print("\n=== TEST TERMINÉ ===")

if __name__ == "__main__":
    test_profit_taker()