#!/usr/bin/env python3
"""
Test d'anonymisation sur un document réel avec analyse des résultats.
"""
import sys
from pathlib import Path

# Importer le système d'anonymisation
from anonymizer_core_refactored_onnx import anonymize_pdf_file

# Importer les outils d'évaluation
from evaluation import LeakScanner

def main():
    # Sélectionner un document simple
    pdf_path = Path("tests/ground_truth/pdfs/003_simple_compte_rendu_CRO_23155084.pdf")
    
    if not pdf_path.exists():
        print(f"✗ Document introuvable: {pdf_path}")
        return 1
    
    print("="*80)
    print("TEST D'ANONYMISATION SUR UN DOCUMENT RÉEL")
    print("="*80)
    print(f"\n📄 Document: {pdf_path.name}")
    print(f"   Type: Compte-rendu opératoire (CRO)")
    print(f"   Complexité: Simple (1 page)")
    
    # Créer le répertoire de sortie
    output_dir = Path("tests/ground_truth/pdfs/anonymized_test")
    output_dir.mkdir(exist_ok=True)
    
    print(f"\n📁 Répertoire de sortie: {output_dir}")
    
    # Anonymiser le document
    print("\n🔄 Anonymisation en cours...")
    print("   (Cela peut prendre quelques secondes)")
    
    try:
        result = anonymize_pdf_file(
            pdf_path=str(pdf_path),
            output_dir=str(output_dir),
            use_ner=True,  # Activer le NER
            use_vlm=False,  # Désactiver le VLM pour ce test (plus rapide)
            raster_dpi=150,
            force_raster=False
        )
        
        print("\n✓ Anonymisation terminée !")
        
        # Afficher les résultats
        if result:
            audit_path = output_dir / f"{pdf_path.stem}.audit.jsonl"
            redacted_pdf = output_dir / f"{pdf_path.stem}.redacted_raster.pdf"
            
            if not redacted_pdf.exists():
                redacted_pdf = output_dir / f"{pdf_path.stem}.redacted_vector.pdf"
            
            print(f"\n📊 Fichiers générés:")
            print(f"   - PDF anonymisé: {redacted_pdf.name}")
            print(f"   - Audit: {audit_path.name}")
            
            # Compter les PII détectés
            if audit_path.exists():
                with open(audit_path, 'r', encoding='utf-8') as f:
                    pii_count = sum(1 for line in f if line.strip())
                
                print(f"\n🔍 PII détectés: {pii_count}")
                
                # Afficher les premiers PII
                print("\n📋 Premiers PII détectés:")
                with open(audit_path, 'r', encoding='utf-8') as f:
                    for i, line in enumerate(f):
                        if i >= 10:  # Limiter à 10
                            break
                        if line.strip():
                            import json
                            pii = json.loads(line)
                            print(f"   {i+1}. {pii.get('kind', 'UNKNOWN'):15s} : {pii.get('original', '')[:50]}")
                
                if pii_count > 10:
                    print(f"   ... et {pii_count - 10} autres")
                
                # Scanner les fuites
                print("\n🔒 Scan de fuite en cours...")
                scanner = LeakScanner()
                
                if redacted_pdf.exists():
                    leak_report = scanner.scan(redacted_pdf, audit_path)
                    
                    if leak_report.is_safe:
                        print("   ✓ DOCUMENT SÛR - Aucune fuite détectée")
                    else:
                        print(f"   ✗ ATTENTION - {leak_report.leak_count} fuite(s) détectée(s)")
                        
                        # Afficher les fuites par sévérité
                        for severity, count in sorted(leak_report.severity_counts.items()):
                            print(f"     - {severity}: {count}")
                        
                        # Afficher les premières fuites
                        print("\n   Détails des fuites:")
                        for i, leak in enumerate(leak_report.leaks[:5], 1):
                            print(f"     {i}. [{leak['severity']}] {leak['message']}")
                        
                        if leak_report.leak_count > 5:
                            print(f"     ... et {leak_report.leak_count - 5} autres")
                else:
                    print("   ⚠ PDF anonymisé introuvable, impossible de scanner")
            
            print("\n" + "="*80)
            print("✨ Test terminé avec succès !")
            print("="*80)
            
            print(f"\n📂 Fichiers disponibles dans: {output_dir}")
            print("\n💡 Pour voir le PDF anonymisé:")
            print(f"   xdg-open {redacted_pdf}")
            
            return 0
        else:
            print("\n✗ Erreur lors de l'anonymisation")
            return 1
            
    except Exception as e:
        print(f"\n✗ Erreur: {e}")
        import traceback
        traceback.print_exc()
        return 1

if __name__ == "__main__":
    sys.exit(main())
