#!/usr/bin/env python3
"""
RAPPORT D'ANALYSE PATTERNS - Incohérences détectées
"""

import json
from collections import Counter

print("\n" + "="*80)
print("🔍 RAPPORT D'ANALYSE: INCOHÉRENCES DANS LES PATTERNS")
print("="*80)

# ══════════════════════════════════════════════════════════════════════════════
# 1. PATTERNS ATTENDUS (selon travail récent)
# ══════════════════════════════════════════════════════════════════════════════

PATTERNS_TRAVAILLES_RECEMMENT = [
    'CREUX_REBOUND',      # Rebond depuis creux - autorisé
    'PULLBACK',           # Pullback dans tendance haussière - autorisé avec BB ≤ 0.88
    'TREND_CONTINUATION', # Continuation de tendance - autorisé
    'SQUEEZE_BREAKOUT',   # Breakout après squeeze - autorisé
    'HIGH_SCORE_OVERRIDE',# Score élevé override - DÉSACTIVÉ
    'POSSIBLE_BLOCKED'    # Signal POSSIBLE - BLOQUÉ (achat à la baisse)
]

print("\n📋 PATTERNS SUR LESQUELS ON A TRAVAILLÉ:")
print("-" * 80)
for pattern in PATTERNS_TRAVAILLES_RECEMMENT:
    print(f"   • {pattern}")

# ══════════════════════════════════════════════════════════════════════════════
# 2. PATTERNS RÉELLEMENT ASSIGNÉS PAR LE CODE (ai_predictor.py)
# ══════════════════════════════════════════════════════════════════════════════

# Patterns trouvés dans ai_predictor.py (grep search)
PATTERNS_ASSIGNES_DANS_CODE = [
    'STABLECOIN_REJECTED',
    'DEAD_CAT_BOUNCE',
    'PROLONGED_DOWNTREND',
    'NEUTRAL',
    'CREUX_REBOUND',          # ✅ Travaillé
    'ACTIVE_CRASH',
    'RSI_TRAP',
    'STRONG_DOWNTREND',
    'HIGH_SCORE_OVERRIDE',    # ✅ Travaillé (mais désactivé)
    'IMMEDIATE_DIP',
    'CORRECTION_BUY',
    'CREUX_TOO_DEEP',
    'PULLBACK',               # ✅ Travaillé
    'FALLING_KNIFE_BLOCKED',
    'CREUX_WAITING',
    'SQUEEZE_WAITING',
    'POSSIBLE_BLOCKED',       # ✅ Travaillé
    'NO_BUY_BEARISH',
    'SQUEEZE_BREAKOUT',       # ✅ Travaillé
    'SQUEEZE_SETUP',
    'END_OF_CYCLE',
    'BEARISH_TREND',
    'EMA_DECLINING',
    'MARKET_CRASH_BLOCKED'
]

print("\n🔧 PATTERNS ASSIGNÉS DANS LE CODE (ai_predictor.py):")
print("-" * 80)
print(f"Total: {len(PATTERNS_ASSIGNES_DANS_CODE)} patterns différents\n")

patterns_attendus_trouves = []
patterns_non_attendus = []

for pattern in PATTERNS_ASSIGNES_DANS_CODE:
    if pattern in PATTERNS_TRAVAILLES_RECEMMENT:
        patterns_attendus_trouves.append(pattern)
        print(f"   ✅ {pattern}")
    else:
        patterns_non_attendus.append(pattern)
        print(f"   ⚠️  {pattern}")

# ══════════════════════════════════════════════════════════════════════════════
# 3. PATTERNS DANS LE PATTERN_MANAGER
# ══════════════════════════════════════════════════════════════════════════════

PATTERNS_DANS_PATTERN_MANAGER = [
    'UNKNOWN',
    'DEAD_CAT_BOUNCE',
    'PROLONGED_DOWNTREND',
    'END_OF_CYCLE',
    'RSI_TRAP',
    'STRONG_DOWNTREND',
    'ACTIVE_CRASH',
    'STABLECOIN_REJECTED',
    'HOLD',
    'POSSIBLE',
    'ACHAT',
    'CREUX_REBOUND',
    'EARLY_BREAKOUT',
    'CONSOLIDATION_BREAKOUT',
    'EMA_BULLISH',
    'CROSSOVER_IMMINENT',
    'VOLUME_REVERSAL',
    'RSI_REVERSAL',
    'SQUEEZE_BREAKOUT',
    'PULLBACK',
    'MOMENTUM_BREAKOUT',
    'STRONG_UPTREND',
    'TREND_CONTINUATION'
]

print("\n📚 PATTERNS CONFIGURÉS DANS PATTERN_MANAGER:")
print("-" * 80)
print(f"Total: {len(PATTERNS_DANS_PATTERN_MANAGER)} patterns configurés\n")

for pattern in PATTERNS_DANS_PATTERN_MANAGER:
    if pattern in PATTERNS_TRAVAILLES_RECEMMENT:
        print(f"   ✅ {pattern}")
    else:
        print(f"   📝 {pattern}")

# ══════════════════════════════════════════════════════════════════════════════
# 4. ANALYSE DES TRADES RÉELS
# ══════════════════════════════════════════════════════════════════════════════

print("\n💼 PATTERNS RÉELLEMENT UTILISÉS DANS LES TRADES:")
print("-" * 80)

try:
    with open('trade_history.json', 'r') as f:
        history = json.load(f)
    
    patterns_reels = [t.get('pattern', 'UNKNOWN') for t in history]
    counter_reels = Counter(patterns_reels)
    
    for pattern, count in counter_reels.most_common():
        if pattern in PATTERNS_TRAVAILLES_RECEMMENT:
            print(f"   ✅ {pattern}: {count} trades")
        else:
            print(f"   ⚠️  {pattern}: {count} trades ← NON TRAVAILLÉ")
    
except Exception as e:
    print(f"   ❌ Erreur: {e}")

# ══════════════════════════════════════════════════════════════════════════════
# 5. POSITIONS ACTUELLES
# ══════════════════════════════════════════════════════════════════════════════

print("\n📍 PATTERNS DES POSITIONS ACTUELLES:")
print("-" * 80)

try:
    with open('positions.json', 'r') as f:
        positions = json.load(f)
    
    if isinstance(positions, dict):
        for symbol, pos in positions.items():
            pattern = pos.get('pattern', 'UNKNOWN')
            entry = pos.get('entry_price', 0)
            if pattern in PATTERNS_TRAVAILLES_RECEMMENT:
                print(f"   ✅ {symbol}: {pattern} @ {entry}")
            else:
                print(f"   ⚠️  {symbol}: {pattern} @ {entry} ← NON TRAVAILLÉ")
    
except Exception as e:
    print(f"   ❌ Erreur: {e}")

# ══════════════════════════════════════════════════════════════════════════════
# 6. RÉSUMÉ DES INCOHÉRENCES
# ══════════════════════════════════════════════════════════════════════════════

print("\n🔴 RÉSUMÉ DES INCOHÉRENCES DÉTECTÉES:")
print("=" * 80)

print(f"\n1. PATTERNS NON TRAVAILLÉS MAIS ASSIGNABLES:")
print(f"   {len(patterns_non_attendus)} patterns peuvent être assignés par ai_predictor.py")
print(f"   mais ne font PAS partie de notre travail récent:")
for pattern in sorted(patterns_non_attendus):
    print(f"      • {pattern}")

print(f"\n2. PATTERNS MANQUANTS:")
patterns_manquants = set(PATTERNS_TRAVAILLES_RECEMMENT) - set(PATTERNS_ASSIGNES_DANS_CODE)
if patterns_manquants:
    print(f"   Patterns travaillés mais NON assignables dans le code:")
    for pattern in patterns_manquants:
        print(f"      • {pattern}")
else:
    print(f"   ✅ Tous les patterns travaillés sont présents dans le code")

print(f"\n3. EXPLICATION:")
print(f"   Le code ai_predictor.py contient {len(PATTERNS_ASSIGNES_DANS_CODE)} patterns")
print(f"   différents, alors que notre travail récent ne portait que sur")
print(f"   {len(PATTERNS_TRAVAILLES_RECEMMENT)} patterns spécifiques.")
print(f"")
print(f"   ➡️ CAUSE: Le code ai_predictor.py est un ANCIEN système qui assigne")
print(f"      de nombreux patterns basés sur des conditions complexes.")
print(f"")
print(f"   ➡️ SOLUTION: Désactiver l'ancien système de patterns et utiliser")
print(f"      UNIQUEMENT les patterns validés par smart_criteria.")

print("\n" + "="*80)
