#!/usr/bin/env python3
"""
Script pour fermer une position test par trade inverse
"""

import os
import logging
from dotenv import load_dotenv
from apollox_v2_client import ApolloXV2Client
from position_monitor import PositionMonitor
import requests

load_dotenv()

logging.basicConfig(level=logging.INFO, format='%(message)s')
logger = logging.getLogger(__name__)

def main():
    """Ferme une position test"""

    private_key = os.getenv('WALLET_PRIVATE_KEY')
    if not private_key:
        logger.error("❌ WALLET_PRIVATE_KEY manquante dans .env")
        return

    client = ApolloXV2Client(private_key=private_key)
    monitor = PositionMonitor()

    logger.info("=" * 80)
    logger.info("🔍 RECHERCHE POSITIONS ACTIVES")
    logger.info("=" * 80)
    logger.info("")

    # Récupérer positions actives depuis The Graph
    active_positions = monitor.get_active_positions()

    if not active_positions:
        logger.error("❌ Aucune position active trouvée")
        return

    logger.info(f"✅ {len(active_positions)} position(s) active(s) trouvée(s):")
    logger.info("")

    # Afficher les positions
    positions_list = []
    for i, (trade_hash, pos) in enumerate(active_positions.items(), 1):
        side = "LONG" if pos['is_long'] else "SHORT"
        logger.info(f"{i}. {pos['symbol']} {side} {pos['leverage']}x")
        logger.info(f"   Margin: ${pos['margin']:.2f}")
        logger.info(f"   Entry: ${pos['entry_price']:,.2f}")
        logger.info(f"   Trade Hash: {trade_hash[:20]}...")
        logger.info("")
        positions_list.append((trade_hash, pos))

    # Sélectionner position à fermer
    if len(positions_list) == 1:
        selected_idx = 0
        logger.info(f"🎯 Position sélectionnée automatiquement: #{selected_idx + 1}")
    else:
        try:
            choice = input(f"\n🎯 Choisir position à fermer (1-{len(positions_list)}): ")
            selected_idx = int(choice) - 1
            if selected_idx < 0 or selected_idx >= len(positions_list):
                logger.error("❌ Choix invalide")
                return
        except (ValueError, KeyboardInterrupt):
            logger.error("❌ Annulé")
            return

    trade_hash, position = positions_list[selected_idx]

    # Récupérer prix actuel
    try:
        resp = requests.get('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT', timeout=10)
        current_price = float(resp.json()['price'])
        logger.info("")
        logger.info(f"📊 Prix BTC actuel: ${current_price:,.2f}")
    except Exception as e:
        logger.error(f"❌ Erreur récupération prix: {e}")
        return

    # Calculer PnL estimé
    entry_price = position['entry_price']
    is_long = position['is_long']
    margin = position['margin']
    leverage = position['leverage']

    if is_long:
        pnl_pct = (current_price - entry_price) / entry_price * 100
    else:
        pnl_pct = (entry_price - current_price) / entry_price * 100

    pnl_usd = margin * (pnl_pct / 100) * leverage

    logger.info("")
    logger.info("=" * 80)
    logger.info("📊 ESTIMATION PnL")
    logger.info("=" * 80)
    logger.info(f"Entry: ${entry_price:,.2f}")
    logger.info(f"Current: ${current_price:,.2f}")
    logger.info(f"PnL: {pnl_pct:+.2f}% → ${pnl_usd:+.2f}")
    logger.info("")

    input("⚠️  Appuyez sur ENTER pour confirmer la fermeture... ")

    logger.info("")
    logger.info("🚀 Fermeture de la position...")
    logger.info("")

    try:
        success = client.close_position(trade_hash=trade_hash)

        if success:
            logger.info("")
            logger.info("=" * 80)
            logger.info("✅ SUCCÈS")
            logger.info("=" * 80)
            logger.info(f"Position fermée: {trade_hash[:20]}...")
            logger.info("")
            logger.info("📊 Attendez ~2-3 min pour indexation The Graph")
            logger.info("🔍 Vérifiez ensuite avec: python3 position_sync.py")
        else:
            logger.error("❌ Échec fermeture position")

    except Exception as e:
        logger.error(f"❌ Erreur: {e}")
        import traceback
        traceback.print_exc()

if __name__ == '__main__':
    main()
