#!/usr/bin/env python3
"""
Test spécifique pour debug LaTeX
"""

import os
import sys
import subprocess
import tempfile
import logging

# Configuration du logging pour éviter les imports Discord
logging.basicConfig(level=logging.ERROR)

# Ajouter le chemin du module
sys.path.append('/var/www/html/swiplay.fr/scambot')

# Import direct pour éviter les dépendances Discord
def test_contract_generator_direct():
    """Test le générateur avec données réelles comme le bot"""
    print("\n🔧 Test générateur avec données réelles...")
    
    try:
        from modules.contract_generator import ContractGenerator
        from modules.user_manager import UserManager
        
        # Initialiser les managers
        generator = ContractGenerator()
        user_manager = UserManager()
        
        print("✅ Modules importés avec succès")
        
        # Récupérer des données utilisateur réelles
        discord_id = "393151974109085697"  # Mohamed Hamdouni
        user_data = user_manager.get_user(discord_id)
        
        if not user_data:
            print(f"❌ Utilisateur {discord_id} non trouvé dans la DB")
            return False
        
        print(f"👤 Test avec utilisateur trouvé: {user_data}")
        
        # Vérifier les données utilisateur
        for key, value in user_data.items():
            print(f"  📝 {key}: {repr(value)} (type: {type(value).__name__})")
            if isinstance(value, str):
                # Analyser les caractères problématiques
                problematic_chars = []
                for char in value:
                    if ord(char) > 127:
                        problematic_chars.append(f"{char}(U+{ord(char):04X})")
                if problematic_chars:
                    print(f"    ⚠️ Caractères non-ASCII: {', '.join(problematic_chars)}")
        
        # Données vidéo test avec émojis comme dans les vraies données Instagram
        video_data = {
            'title': 'eyzuro Instagram post avec emojis 😊🎬 et caractères spéciaux',
            'platform': 'Instagram', 
            'published_date': '30/08/2025',
            'url': 'https://instagram.com/test'
        }
        
        print(f"\n🎬 Données vidéo:")
        for key, value in video_data.items():
            print(f"  📝 {key}: {repr(value)}")
            if isinstance(value, str):
                problematic_chars = []
                for char in value:
                    if ord(char) > 127:
                        problematic_chars.append(f"{char}(U+{ord(char):04X})")
                if problematic_chars:
                    print(f"    ⚠️ Caractères non-ASCII: {', '.join(problematic_chars)}")
        
        # Générer le contrat directement avec logs verbeux
        print(f"\n📄 Génération du contrat avec données réelles...")
        result = generator.generate_contract(user_data, video_data, "DebugTest")
        
        print(f"📊 Résultat: {result}")
        
        return result.get('success', False)
        
    except Exception as e:
        print(f"❌ Erreur test générateur: {e}")
        import traceback
        traceback.print_exc()
        return False

def test_latex_simple():
    """Test LaTeX avec un document minimal"""
    print("🔧 Test LaTeX simple...")
    
    # Document LaTeX minimal sans caractères spéciaux
    simple_latex = r"""\documentclass[11pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\geometry{left=2.5cm, right=2.5cm, top=3cm, bottom=3cm}

\begin{document}
\pagestyle{empty}

\begin{center}
    \LARGE{\textbf{TEST DOCUMENT}}
\end{center}

Ceci est un test simple.

Nom: Test User
Adresse: 123 Test Street
Date: 30/08/2025

\end{document}"""
    
    try:
        # Créer un fichier temporaire
        with tempfile.NamedTemporaryFile(mode='w', suffix='.tex', delete=False, encoding='utf-8') as temp_file:
            temp_file.write(simple_latex)
            temp_tex_path = temp_file.name
        
        print(f"📁 Fichier temporaire: {temp_tex_path}")
        
        # Essayer de compiler
        output_dir = "/tmp"
        filename_base = "test_simple"
        
        compile_cmd = [
            'pdflatex',
            '-interaction=nonstopmode',
            f'-output-directory={output_dir}',
            f'-jobname={filename_base}',
            temp_tex_path
        ]
        
        print(f"🔄 Commande: {' '.join(compile_cmd)}")
        
        result = subprocess.run(compile_cmd, capture_output=True, text=True, cwd=output_dir)
        
        print(f"📊 Code de retour: {result.returncode}")
        print(f"📤 STDOUT: {result.stdout[:500]}..." if result.stdout else "📤 STDOUT vide")
        print(f"❌ STDERR: {result.stderr[:500]}..." if result.stderr else "✅ STDERR vide")
        
        # Vérifier le fichier PDF
        pdf_path = os.path.join(output_dir, f"{filename_base}.pdf")
        if os.path.exists(pdf_path):
            size = os.path.getsize(pdf_path)
            print(f"✅ PDF créé: {pdf_path} ({size} bytes)")
        else:
            print(f"❌ PDF non trouvé: {pdf_path}")
        
        # Vérifier le fichier log
        log_path = os.path.join(output_dir, f"{filename_base}.log")
        if os.path.exists(log_path):
            print(f"📋 Log disponible: {log_path}")
            with open(log_path, 'r', encoding='utf-8', errors='ignore') as f:
                log_content = f.read()
                if "Error" in log_content or "error" in log_content:
                    print("❌ Erreurs trouvées dans le log:")
                    lines = log_content.split('\n')
                    for i, line in enumerate(lines):
                        if 'error' in line.lower():
                            print(f"  Line {i}: {line}")
        
        # Nettoyer
        if os.path.exists(temp_tex_path):
            os.unlink(temp_tex_path)
        
        return result.returncode == 0
        
    except Exception as e:
        print(f"❌ Erreur test LaTeX: {e}")
        return False

def test_contract_generator_detailed():
    """Test détaillé du générateur de contrats"""
    print("\n🔧 Test détaillé du générateur...")
    
    try:
        from modules.contract_generator import ContractGenerator
        generator = ContractGenerator()
    except ImportError as e:
        print(f"❌ Erreur import ContractGenerator: {e}")
        return False
    
    # Données de test simples (sans caractères spéciaux)
    user_data = {
        'prenom': 'Jean',
        'nom': 'Dupont',
        'rue': '123 Rue Test',
        'code_postal': '75001',
        'ville': 'Paris'
    }
    
    video_data = {
        'title': 'Test Video Simple',
        'platform': 'YouTube',
        'published_date': '30/08/2025',
        'url': 'https://youtube.com/test'
    }
    
    print(f"👤 Utilisateur: {user_data['prenom']} {user_data['nom']}")
    print(f"🎬 Vidéo: {video_data['title']}")
    
    # Vérifier LaTeX
    latex_ok = generator.check_latex_installation()
    print(f"✅ LaTeX disponible: {latex_ok}")
    
    if not latex_ok:
        print("❌ LaTeX non disponible - arrêt du test")
        return False
    
    # Créer le template
    try:
        template_path = generator.create_latex_template()
        print(f"📄 Template créé: {template_path}")
        
        if os.path.exists(template_path):
            with open(template_path, 'r', encoding='utf-8', errors='ignore') as f:
                content = f.read()
                print(f"📝 Template size: {len(content)} caractères")
        
    except Exception as e:
        print(f"❌ Erreur création template: {e}")
        return False
    
    # Générer le contrat
    try:
        result = generator.generate_contract(user_data, video_data, "TestUser")
        
        if result['success']:
            print(f"✅ Contrat généré: {result['filename']}")
            if os.path.exists(result['pdf_path']):
                size = os.path.getsize(result['pdf_path'])
                print(f"📊 Taille PDF: {size} bytes")
            else:
                print(f"❌ Fichier PDF non trouvé: {result['pdf_path']}")
        else:
            print(f"❌ Erreur génération: {result['error']}")
            return False
            
    except Exception as e:
        print(f"❌ Exception génération: {e}")
        return False
    
    return True

def check_latex_packages():
    """Vérifier les packages LaTeX disponibles"""
    print("\n📦 Vérification des packages LaTeX...")
    
    packages_to_check = [
        'inputenc',
        'fontenc', 
        'babel',
        'geometry',
        'lmodern'
    ]
    
    for package in packages_to_check:
        try:
            # Créer un document de test minimal pour ce package
            test_doc = f"""\\documentclass{{article}}
\\usepackage{{{package}}}
\\begin{{document}}
Test
\\end{{document}}"""
            
            with tempfile.NamedTemporaryFile(mode='w', suffix='.tex', delete=False, encoding='utf-8') as f:
                f.write(test_doc)
                temp_path = f.name
            
            result = subprocess.run([
                'pdflatex', 
                '-interaction=nonstopmode',
                '-output-directory=/tmp',
                temp_path
            ], capture_output=True, text=True)
            
            if result.returncode == 0:
                print(f"✅ Package {package}: OK")
            else:
                print(f"❌ Package {package}: Erreur")
                
            os.unlink(temp_path)
            
        except Exception as e:
            print(f"❌ Package {package}: Exception {e}")

def test_with_instagram_pseudo():
    """Test avec le pseudonyme Instagram de l'utilisateur"""
    print("\n🔧 Test avec pseudonyme Instagram...")
    
    try:
        from modules.contract_generator import ContractGenerator
        from modules.user_manager import UserManager
        
        # Initialiser les managers
        generator = ContractGenerator()
        user_manager = UserManager()
        
        # Récupérer l'utilisateur
        discord_id = "393151974109085697"
        user_data = user_manager.get_user(discord_id)
        
        if not user_data:
            print(f"❌ Utilisateur {discord_id} non trouvé")
            return False
        
        # Simuler les données avec Instagram
        user_data_with_instagram = dict(user_data)
        user_data_with_instagram['instagram'] = 'eyzuro'
        
        print(f"👤 Utilisateur: {user_data_with_instagram['prenom']} {user_data_with_instagram['nom']}")
        print(f"📸 Instagram: @{user_data_with_instagram['instagram']}")
        
        # Données vidéo
        video_data = {
            'title': 'Ce jeu où toi et tes potes entrez en guerre !',
            'platform': 'Instagram',
            'published_date': '30/05/2025',
            'url': 'https://www.instagram.com/p/DKRynr4sOeN/'
        }
        
        # Générer le contrat avec le bon pseudonyme
        result = generator.generate_contract(
            user_data_with_instagram, 
            video_data, 
            user_data_with_instagram['instagram']
        )
        
        print(f"📊 Résultat: {result}")
        
        if result.get('success'):
            print(f"✅ PDF généré avec pseudonyme @{user_data_with_instagram['instagram']}")
            return True
        else:
            print(f"❌ Échec: {result.get('error')}")
            return False
        
    except Exception as e:
        print(f"❌ Erreur: {e}")
        import traceback
        traceback.print_exc()
        return False

if __name__ == "__main__":
    print("🚀 Debug LaTeX pour scambot")
    print("=" * 50)
    
    # Configuration du logging plus verbeux
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        handlers=[
            logging.StreamHandler(sys.stdout)
        ]
    )
    
    # Activer les logs pour nos modules
    logging.getLogger('contract_generator').setLevel(logging.DEBUG)
    logging.getLogger('user_manager').setLevel(logging.DEBUG)
    
    # Tests
    success1 = test_latex_simple()
    check_latex_packages()
    success2 = test_contract_generator_detailed()
    success3 = test_contract_generator_direct()
    success4 = test_with_instagram_pseudo()
    
    print(f"\n📊 Résultats:")
    print(f"   LaTeX simple: {'✅' if success1 else '❌'}")
    print(f"   Générateur test: {'✅' if success2 else '❌'}")
    print(f"   Générateur réel: {'✅' if success3 else '❌'}")
    print(f"   Avec Instagram: {'✅' if success4 else '❌'}")
    
    if success1 and success2 and success3 and success4:
        print("\n🎉 Tous les tests LaTeX réussis!")
    else:
        print("\n⚠️ Des problèmes ont été détectés avec LaTeX")