#!/usr/bin/env python3
"""
Script de réparation pour analyser les images historiques
qui n'ont pas de fichier JSON sidecar
"""
import os
import sys
import json
import glob
from datetime import datetime

# Import du module d'analyse
sys.path.insert(0, '/var/www/lucas')
from analyze import analyze_image

def find_images_without_json(client_folder):
    """Trouve toutes les images sans fichier JSON"""
    images = glob.glob(f"{client_folder}/*.jpg")
    missing = []

    for img in images:
        json_file = img + ".json"
        if not os.path.exists(json_file):
            missing.append(img)

    return sorted(missing, key=lambda x: os.path.getmtime(x), reverse=True)

def repair_image_analysis(image_path):
    """Analyse une image et crée son fichier JSON sidecar"""
    print(f"\n📸 Analyse: {os.path.basename(image_path)}")

    try:
        # Analyser l'image
        result = analyze_image(image_path)

        # Créer le fichier JSON sidecar
        history_data = {
            "urgence": result.get("urgence", False),
            "message": result.get("message", "Analyse rétrospective"),
            "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "retrospective": True  # Marqueur pour indiquer que c'est une analyse a posteriori
        }

        json_file = image_path + ".json"
        with open(json_file, 'w') as f:
            json.dump(history_data, f, indent=2)

        status = "🚨 URGENCE" if result.get("urgence") else "✅ SÉCURISÉ"
        print(f"   {status} - {result.get('message', '')[:60]}")

        return True

    except Exception as e:
        print(f"   ❌ ERREUR: {type(e).__name__}: {str(e)}")

        # Créer quand même un JSON avec l'erreur
        history_data = {
            "urgence": None,  # null = inconnu
            "message": f"Erreur d'analyse rétrospective: {type(e).__name__}",
            "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "retrospective": True,
            "error": True
        }

        json_file = image_path + ".json"
        with open(json_file, 'w') as f:
            json.dump(history_data, f, indent=2)

        return False

def main():
    print("="*70)
    print("RÉPARATION DES ANALYSES MANQUANTES")
    print("="*70)

    client_folder = "/var/www/lucas/clients/Demo_01"

    if not os.path.exists(client_folder):
        print(f"❌ Dossier introuvable: {client_folder}")
        return 1

    # Trouver les images sans JSON
    print(f"\n🔍 Recherche des images sans analyse...")
    missing_images = find_images_without_json(client_folder)

    if not missing_images:
        print("✅ Toutes les images ont déjà une analyse JSON!")
        return 0

    print(f"\n📊 Trouvé: {len(missing_images)} images sans analyse")

    # Demander confirmation si beaucoup d'images
    if len(missing_images) > 50:
        print(f"\n⚠️  ATTENTION: {len(missing_images)} images à analyser")
        print(f"   Cela peut prendre ~{len(missing_images) * 5} secondes")
        response = input("   Continuer ? (o/n): ")
        if response.lower() != 'o':
            print("Annulé.")
            return 0

    # Analyser les images
    print(f"\n🚀 Démarrage de l'analyse...")
    print("-"*70)

    success_count = 0
    error_count = 0

    for i, img in enumerate(missing_images, 1):
        print(f"\n[{i}/{len(missing_images)}]", end=" ")

        if repair_image_analysis(img):
            success_count += 1
        else:
            error_count += 1

    # Résumé
    print("\n" + "="*70)
    print("RÉSUMÉ")
    print("="*70)
    print(f"Images analysées: {len(missing_images)}")
    print(f"✅ Succès: {success_count}")
    print(f"❌ Erreurs: {error_count}")
    print("\n✓ Réparation terminée!")
    print("="*70)

    return 0

if __name__ == "__main__":
    try:
        sys.exit(main())
    except KeyboardInterrupt:
        print("\n\n⚠️  Interruption par l'utilisateur")
        sys.exit(1)
    except Exception as e:
        print(f"\n❌ Erreur fatale: {type(e).__name__}: {e}")
        import traceback
        traceback.print_exc()
        sys.exit(1)
