# build_client.py - Script simplifié pour créer les exécutables client
"""
Script simple pour créer des exécutables Web Sentinel distributable aux clients.
"""

import subprocess
import sys
import shutil
from pathlib import Path

def build_cli_executable():
    """Créer l'exécutable CLI."""
    
    print("🚀 Construction de l'exécutable CLI Web Sentinel...")
    
    cmd = [
        sys.executable, "-m", "PyInstaller",
        "--onefile",
        "--name", "web-sentinel",
        "--console",
        "--clean",
        # Inclure les modules critiques
        "--hidden-import", "web_sentinel.checks.headers",
        "--hidden-import", "web_sentinel.checks.tls",
        "--hidden-import", "web_sentinel.checks.injection",
        "--hidden-import", "web_sentinel.checks.static_analysis", 
        "--hidden-import", "web_sentinel.checks.third_party",
        "--hidden-import", "web_sentinel.gui.i18n.localization",
        # Inclure les modules de traduction
        "--hidden-import", "web_sentinel.localization",
        # Inclure les dépendances GUI nécessaires (pour auth_manager)
        "--hidden-import", "tkinter",
        "--hidden-import", "tkinter.messagebox",
        "--hidden-import", "tkinter.simpledialog",
        # Exclure les dépendances de développement
        "--exclude-module", "pytest",
        # Point d'entrée
        "cli_entry.py"
    ]
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    if result.returncode == 0:
        print("✅ CLI executable créé: dist/web-sentinel.exe")
        return True
    else:
        print("❌ Erreur CLI:")
        print(result.stderr)
        return False

def test_executable():
    """Tester l'exécutable créé."""
    
    exe_path = Path("dist/web-sentinel.exe")
    if not exe_path.exists():
        print("❌ Exécutable introuvable")
        return False
    
    print("🧪 Test de l'exécutable...")
    
    # Test avec --help
    result = subprocess.run([str(exe_path), "--help"], 
                          capture_output=True, text=True, timeout=10)
    
    if result.returncode == 0 and "Web Sentinel" in result.stdout:
        print("✅ Exécutable fonctionne correctement")
        return True
    else:
        print("❌ Test de l'exécutable échoué:")
        print(result.stderr)
        return False

def create_distribution_package():
    """Créer un package de distribution."""
    
    dist_dir = Path("client_distribution")
    if dist_dir.exists():
        shutil.rmtree(dist_dir)
    
    dist_dir.mkdir()
    
    # Copier l'exécutable
    exe_source = Path("dist/web-sentinel.exe")
    exe_dest = dist_dir / "web-sentinel.exe"
    
    if exe_source.exists():
        shutil.copy2(exe_source, exe_dest)
        print(f"✅ Exécutable copié: {exe_dest}")
    
    # Créer un guide d'utilisation
    usage_guide = """# Web Sentinel - Guide d'utilisation

## Installation
Aucune installation requise ! Ce fichier est un exécutable autonome.

## Usage de base

### Scan simple
```cmd
web-sentinel.exe example.com
```

### Scan avec rapport JSON
```cmd
web-sentinel.exe example.com --json --json-report report.json
```

### Scan avec rapport HTML
```cmd
web-sentinel.exe example.com --html-report report.html
```

### Modules spécifiques
```cmd
web-sentinel.exe example.com --modules headers tls
```

### Tests invasifs (licence requise)
```cmd
web-sentinel.exe example.com --allow-invasive
```

## Options disponibles

- `--json` : Sortie au format JSON
- `--json-report FILE` : Sauvegarder rapport JSON 
- `--html-report FILE` : Sauvegarder rapport HTML
- `--modules LIST` : Modules à exécuter (headers, tls, injection, etc.)
- `--allow-invasive` : Activer tests actifs (licence PRO+ requise)
- `--timeout N` : Timeout réseau en secondes (défaut: 5.0)
- `--language fr|en` : Langue des rapports
- `--help` : Aide complète

## Support
Pour toute question : contact@taaazzz-prog.fr
Documentation : https://docs.web-sentinel.com
"""
    
    with open(dist_dir / "USAGE_GUIDE.md", "w", encoding="utf-8") as f:
        f.write(usage_guide)
    
    # Créer un script batch pour Windows
    batch_script = """@echo off
echo Web Sentinel Security Scanner
echo ============================
echo.
if "%1"=="" (
    echo Usage: scan.bat domain.com
    echo Example: scan.bat example.com
    goto :eof
)

web-sentinel.exe %* --json
pause
"""
    
    with open(dist_dir / "scan.bat", "w", encoding="utf-8") as f:
        f.write(batch_script)
    
    print(f"✅ Package de distribution créé: {dist_dir}/")
    print("📋 Contenu:")
    for file in dist_dir.iterdir():
        print(f"   - {file.name}")
    
    return True

def main():
    """Point d'entrée principal."""
    
    print("🏗️ Construction du client Web Sentinel...")
    
    if not build_cli_executable():
        print("❌ Échec de la construction")
        return False
    
    if not test_executable():
        print("⚠️ L'exécutable a des problèmes")
        # Continue quand même
    
    if not create_distribution_package():
        print("❌ Échec de création du package")
        return False
    
    print("\n🎉 Client prêt pour distribution!")
    print("📦 Fichiers à donner aux clients:")
    print("   - client_distribution/web-sentinel.exe")
    print("   - client_distribution/USAGE_GUIDE.md") 
    print("   - client_distribution/scan.bat (helper Windows)")
    
    print("\n💡 Les clients peuvent utiliser:")
    print("   web-sentinel.exe example.com --json")
    print("   scan.bat example.com")
    
    return True

if __name__ == "__main__":
    main()