#!/usr/bin/env python3
"""
Diagnostic: Pourquoi une crypto n'a pas été achetée?
Analyse les signaux et les raisons de non-achat
"""

import json
import os
from datetime import datetime, timedelta

def analyze_missing_trade(symbol, target_time_str):
    """Analyser pourquoi un symbole n'a pas été acheté à un moment précis"""
    
    # Convertir l'heure cible
    target_time = datetime.strptime(target_time_str, "%Y-%m-%d %H:%M")
    window_start = target_time - timedelta(minutes=5)
    window_end = target_time + timedelta(minutes=5)
    
    print("=" * 70)
    print(f"🔍 DIAGNOSTIC NON-ACHAT: {symbol}")
    print("=" * 70)
    print(f"Heure cible: {target_time_str}")
    print(f"Fenêtre: {window_start.strftime('%H:%M')} - {window_end.strftime('%H:%M')}")
    print()
    
    # Lire les signaux
    signals_file = "trade_logs/signals_log.jsonl"
    if not os.path.exists(signals_file):
        print("❌ Fichier signals_log.jsonl introuvable")
        return
    
    # Chercher les signaux du symbole dans la fenêtre
    signals_in_window = []
    all_signals_symbol = []
    
    with open(signals_file, 'r', encoding='utf-8') as f:
        for line in f:
            try:
                entry = json.loads(line)
                if entry.get('symbol') == symbol:
                    ts = datetime.strptime(entry['timestamp'][:19], "%Y-%m-%d %H:%M:%S")
                    all_signals_symbol.append({
                        'time': ts,
                        'score': entry.get('ai_score'),
                        'pattern': entry.get('pattern'),
                        'smart_signal': entry.get('smart_signal')
                    })
                    
                    if window_start <= ts <= window_end:
                        signals_in_window.append({
                            'time': ts,
                            'score': entry.get('ai_score'),
                            'pattern': entry.get('pattern'),
                            'smart_signal': entry.get('smart_signal'),
                            'smart_eligible': entry.get('smart_eligible')
                        })
            except:
                pass
    
    # Résultats
    print(f"📊 RÉSULTAT:")
    print()
    
    if signals_in_window:
        print(f"✅ {len(signals_in_window)} signal(s) trouvé(s) dans la fenêtre {window_start.strftime('%H:%M')}-{window_end.strftime('%H:%M')}:")
        for sig in signals_in_window:
            print(f"   • {sig['time'].strftime('%H:%M:%S')} - Score={sig['score']}, Pattern={sig['pattern']}, Smart={sig['smart_signal']}")
        
        print(f"\n❓ Pourquoi pas d'achat malgré les signaux?")
        print(f"   1. Limite de positions atteinte (MAX_OPEN_POSITIONS)")
        print(f"   2. Solde insuffisant")
        print(f"   3. Pattern bloqué dans pattern_config.json")
        print(f"   4. Régime de marché défavorable (score < min requis)")
        print(f"   5. Filtres techniques non remplis")
    else:
        print(f"❌ AUCUN signal dans la fenêtre {window_start.strftime('%H:%M')}-{window_end.strftime('%H:%M')}")
        
        # Chercher quand est apparu le premier signal
        if all_signals_symbol:
            first_signal = min(all_signals_symbol, key=lambda x: x['time'])
            print(f"\n📅 Premier signal {symbol}:")
            print(f"   • Heure: {first_signal['time'].strftime('%Y-%m-%d %H:%M:%S')}")
            print(f"   • Score: {first_signal['score']}")
            print(f"   • Pattern: {first_signal['pattern']}")
            
            time_diff = (first_signal['time'] - target_time).total_seconds() / 60
            if time_diff > 0:
                print(f"\n⏰ Le signal est apparu {time_diff:.0f} minutes APRÈS l'heure cible")
                print(f"\n❓ Raisons probables:")
                print(f"   1. Score IA < 60 avant {first_signal['time'].strftime('%H:%M')}")
                print(f"   2. Conditions techniques non remplies (RSI, EMA, momentum)")
                print(f"   3. Pattern bloquant avant {first_signal['time'].strftime('%H:%M')}")
            else:
                print(f"\n⏰ Le signal existait {abs(time_diff):.0f} minutes AVANT l'heure cible")
        else:
            print(f"\n❌ Aucun signal {symbol} trouvé dans tout le fichier")
            print(f"\n❓ Raisons probables:")
            print(f"   1. {symbol} jamais évalué par le système")
            print(f"   2. {symbol} toujours en dessous du seuil minimum (score < 60)")
            print(f"   3. {symbol} blacklisté")
    
    print("\n" + "=" * 70)

if __name__ == '__main__':
    # Exemple: Pourquoi PEPE n'a pas été acheté à 12h02?
    analyze_missing_trade("PEPEUSDT", "2026-01-23 12:02")
