#!/usr/bin/env python3
"""
Vérifier l'état de l'apprentissage et des workflows.
"""

import sys
import os
import pickle

sys.path.insert(0, 'geniusia2')

print("="*60)
print("ÉTAT DE L'APPRENTISSAGE")
print("="*60)

# 1. Vérifier le checkpoint du fine-tuner
print("\n1. Checkpoint Fine-tuner:")
checkpoint_path = "data/fine_tuning/orchestrator_finetuning.pkl"
if os.path.exists(checkpoint_path):
    try:
        with open(checkpoint_path, 'rb') as f:
            data = pickle.load(f)
        
        print(f"   ✓ Checkpoint trouvé")
        print(f"   - Exemples positifs: {len(data.get('positive_examples', []))}")
        print(f"   - Exemples négatifs: {len(data.get('negative_examples', []))}")
        print(f"   - Trainings effectués: {data.get('training_count', 0)}")
        
        if data.get('metrics_history'):
            print(f"   - Dernière loss: {data['metrics_history'][-1].get('loss', 'N/A')}")
    except Exception as e:
        print(f"   ❌ Erreur lecture: {e}")
else:
    print(f"   ⚠️  Checkpoint non trouvé")

# 2. Vérifier l'index FAISS
print("\n2. Index FAISS:")
index_path = "data/workflow_embeddings"
if os.path.exists(f"{index_path}.index"):
    size = os.path.getsize(f"{index_path}.index")
    print(f"   ✓ Index trouvé ({size} bytes)")
    
    try:
        with open(f"{index_path}.metadata", 'rb') as f:
            metadata = pickle.load(f)
        
        print(f"   - Dimension: {metadata.get('dimension', 'N/A')}")
        print(f"   - Embeddings: {len(metadata.get('metadata', []))}")
        
        # Afficher quelques workflows
        workflows = {}
        for m in metadata.get('metadata', []):
            wid = m.get('workflow_id', 'unknown')
            workflows[wid] = workflows.get(wid, 0) + 1
        
        if workflows:
            print(f"   - Workflows indexés: {len(workflows)}")
            for wid, count in list(workflows.items())[:5]:
                print(f"     • {wid}: {count} embeddings")
    except Exception as e:
        print(f"   ❌ Erreur lecture metadata: {e}")
else:
    print(f"   ⚠️  Index non trouvé")

# 3. Vérifier les profils utilisateur (ancien système)
print("\n3. Profils utilisateur (ancien système):")
profiles_dir = "data/user_profiles"
if os.path.exists(profiles_dir):
    profiles = [d for d in os.listdir(profiles_dir) if os.path.isdir(os.path.join(profiles_dir, d))]
    print(f"   ✓ {len(profiles)} profils trouvés")
    
    for profile in profiles[:3]:
        tasks_dir = os.path.join(profiles_dir, profile, "tasks")
        if os.path.exists(tasks_dir):
            tasks = [f for f in os.listdir(tasks_dir) if f.endswith('.json')]
            print(f"   - {profile}: {len(tasks)} tâches")
else:
    print(f"   ⚠️  Pas de profils")

# 4. Recommandations
print("\n" + "="*60)
print("RECOMMANDATIONS")
print("="*60)

checkpoint_exists = os.path.exists(checkpoint_path)
if checkpoint_exists:
    with open(checkpoint_path, 'rb') as f:
        data = pickle.load(f)
    total_examples = len(data.get('positive_examples', [])) + len(data.get('negative_examples', []))
    
    if total_examples == 0:
        print("\n⚠️  Aucun exemple collecté")
        print("   → Le système fonctionne mais n'a pas encore d'exemples")
        print("   → Continue à utiliser l'application normalement")
    elif total_examples < 10:
        print(f"\n📊 {total_examples} exemples collectés")
        print(f"   → Encore {10 - total_examples} exemples avant le premier fine-tuning")
    else:
        print(f"\n✅ {total_examples} exemples collectés")
        print(f"   → Fine-tuning devrait avoir été déclenché")
        print(f"   → Trainings effectués: {data.get('training_count', 0)}")

print("\nPour voir des suggestions:")
print("  1. Répète la même action 3+ fois (ex: cliquer sur le même bouton)")
print("  2. Attends la détection du pattern")
print("  3. Répète cette séquence 20 fois pour l'apprendre")
print("  4. La prochaine fois, une suggestion apparaîtra")
print("")
