#!/usr/bin/env python3
"""
Affiche un exemple d'anonymisation avec statistiques détaillées.
"""
import json
import sys
from pathlib import Path
from collections import Counter

def show_example(pdf_name: str = None):
    """Affiche les détails d'un document anonymisé."""
    
    baseline_dir = Path("tests/ground_truth/pdfs/baseline_anonymized")
    
    # Charger les résultats du batch
    results_file = baseline_dir / "batch_results.json"
    if not results_file.exists():
        print(f"✗ Fichier de résultats non trouvé: {results_file}")
        return 1
    
    with open(results_file, 'r', encoding='utf-8') as f:
        batch_data = json.load(f)
    
    # Si pas de PDF spécifié, prendre le premier avec le plus de PII
    if not pdf_name:
        successful = [r for r in batch_data['results'] if r.get('success')]
        if not successful:
            print("✗ Aucun document traité avec succès")
            return 1
        
        # Trier par nombre de PII (décroissant)
        successful.sort(key=lambda x: x.get('pii_count', 0), reverse=True)
        pdf_name = successful[0]['pdf']
    
    # Trouver le résultat
    result = next((r for r in batch_data['results'] if r['pdf'] == pdf_name), None)
    if not result:
        print(f"✗ Document non trouvé: {pdf_name}")
        return 1
    
    if not result.get('success'):
        print(f"✗ Document en échec: {pdf_name}")
        print(f"   Erreur: {result.get('error', 'Unknown')}")
        return 1
    
    # Charger l'audit
    audit_file = baseline_dir / f"{Path(pdf_name).stem}.audit.jsonl"
    if not audit_file.exists():
        print(f"✗ Fichier d'audit non trouvé: {audit_file}")
        return 1
    
    detections = []
    with open(audit_file, 'r', encoding='utf-8') as f:
        for line in f:
            if line.strip():
                detections.append(json.loads(line))
    
    # Analyser les détections
    types_counter = Counter(d.get('kind', d.get('type', 'unknown')) for d in detections)
    methods_counter = Counter(d.get('method', 'unknown') for d in detections)
    pages_counter = Counter(d['page'] for d in detections)
    
    # Afficher
    print("="*80)
    print(f"EXEMPLE D'ANONYMISATION: {pdf_name}")
    print("="*80)
    
    print(f"\n📄 Document: {pdf_name}")
    print(f"⏱️  Temps de traitement: {result['time_s']:.2f}s")
    print(f"🔍 PII détectés: {result['pii_count']}")
    
    print(f"\n📊 Répartition par type:")
    for pii_type, count in types_counter.most_common():
        print(f"   - {pii_type}: {count}")
    
    print(f"\n🔬 Répartition par méthode de détection:")
    for method, count in methods_counter.most_common():
        print(f"   - {method}: {count}")
    
    print(f"\n📖 Répartition par page:")
    for page, count in sorted(pages_counter.items()):
        print(f"   - Page {page}: {count} PII")
    
    # Exemples de détections
    print(f"\n🔍 Exemples de détections (5 premiers):")
    for i, det in enumerate(detections[:5], 1):
        text = det.get('original', det.get('text', ''))
        if len(text) > 40:
            text = text[:37] + "..."
        pii_type = det.get('kind', det.get('type', 'unknown'))
        print(f"   {i}. [{pii_type}] \"{text}\" (page {det['page']}, méthode: {det.get('method', 'unknown')})")
    
    # Fichiers générés
    print(f"\n📂 Fichiers générés:")
    stem = Path(pdf_name).stem
    files = [
        baseline_dir / f"{stem}.pseudonymise.txt",
        baseline_dir / f"{stem}.redacted_vector.pdf",
        baseline_dir / f"{stem}.redacted_raster.pdf",
        baseline_dir / f"{stem}.audit.jsonl"
    ]
    for f in files:
        status = "✓" if f.exists() else "✗"
        print(f"   {status} {f.name}")
    
    print("\n" + "="*80)
    
    return 0


def main():
    import argparse
    
    parser = argparse.ArgumentParser(description="Afficher un exemple d'anonymisation")
    parser.add_argument("pdf", nargs="?", help="Nom du PDF (optionnel, par défaut le plus complexe)")
    
    args = parser.parse_args()
    
    return show_example(args.pdf)


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