#!/usr/bin/env python3
"""
Validation finale des fichiers PHP avant déploiement
"""

import os
import re
from pathlib import Path

def validate_php_files():
    """Valide que tous les fichiers PHP sont corrects avant déploiement"""
    
    print("🔍 VALIDATION FINALE DES FICHIERS PHP")
    print("=" * 50)
    
    site_path = Path("Taaazzz-prog")
    errors = []
    warnings = []
    successes = []
    
    # 1. Vérifier index.php
    print("\n📄 Vérification index.php")
    print("-" * 30)
    
    index_php = site_path / "index.php"
    if index_php.exists():
        with open(index_php, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Vérifier la session
        if "session_start()" in content:
            successes.append("✅ Session PHP initialisée")
        else:
            errors.append("❌ Session PHP manquante")
        
        # Vérifier le token CSRF dans le code PHP
        if "_SESSION['csrf_token']" in content:
            successes.append("✅ Génération du token CSRF")
        else:
            errors.append("❌ Génération du token CSRF manquante")
        
        # Vérifier le token CSRF dans le formulaire
        if 'name="csrf_token"' in content and '<?php echo $_SESSION[\'csrf_token\']; ?>' in content:
            successes.append("✅ Token CSRF dans le formulaire")
        else:
            errors.append("❌ Token CSRF manquant dans le formulaire")
        
        # Vérifier l'action du formulaire
        if 'action="contact.php"' in content:
            successes.append("✅ Action du formulaire vers contact.php")
        else:
            warnings.append("⚠️  Action du formulaire non standard")
    else:
        errors.append("❌ index.php introuvable")
    
    # 2. Vérifier contact.php
    print("\n📄 Vérification contact.php")
    print("-" * 30)
    
    contact_php = site_path / "contact.php"
    if contact_php.exists():
        with open(contact_php, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Vérifier la session
        if "session_start()" in content:
            successes.append("✅ Session PHP dans contact.php")
        else:
            errors.append("❌ Session PHP manquante dans contact.php")
        
        # Vérifier la validation CSRF
        if "hash_equals" in content and "csrf_token" in content:
            successes.append("✅ Validation CSRF sécurisée")
        else:
            errors.append("❌ Validation CSRF manquante ou non sécurisée")
        
        # Vérifier la redirection
        if 'Location: index.php' in content:
            successes.append("✅ Redirection vers index.php")
        elif 'Location: index.html' in content:
            errors.append("❌ Redirection vers index.html au lieu de index.php")
        
        # Vérifier la protection anti-spam
        if "http://" in content and "https://" in content:
            successes.append("✅ Protection anti-spam")
        else:
            warnings.append("⚠️  Protection anti-spam basique")
    else:
        errors.append("❌ contact.php introuvable")
    
    # 3. Vérifier contact.js
    print("\n📄 Vérification contact.js")
    print("-" * 30)
    
    contact_js = site_path / "js" / "contact.js"
    if contact_js.exists():
        with open(contact_js, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Vérifier l'absence d'innerHTML (code actif seulement)
        innerHTML_matches = re.findall(r'\.innerHTML\s*=', content)
        if not innerHTML_matches:
            successes.append("✅ Pas d'innerHTML actif (protection XSS)")
        else:
            errors.append(f"❌ innerHTML encore présent {len(innerHTML_matches)} fois (risque XSS)")
        
        # Vérifier l'usage de textContent
        if "textContent" in content:
            successes.append("✅ Usage de textContent (sécurisé)")
        else:
            warnings.append("⚠️  textContent non détecté")
    else:
        errors.append("❌ contact.js introuvable")
    
    # 4. Vérifier .htaccess
    print("\n📄 Vérification .htaccess")
    print("-" * 30)
    
    htaccess = site_path / ".htaccess"
    if htaccess.exists():
        with open(htaccess, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # Vérifier les headers de sécurité
        security_headers = [
            "Content-Security-Policy",
            "X-Frame-Options",
            "X-Content-Type-Options",
            "Cross-Origin-Opener-Policy",
            "Cross-Origin-Resource-Policy"
        ]
        
        for header in security_headers:
            if header in content:
                successes.append(f"✅ Header {header}")
            else:
                warnings.append(f"⚠️  Header {header} manquant")
        
        # Vérifier la redirection index.html vers index.php
        if "index.html" in content and "index.php" in content:
            successes.append("✅ Redirection index.html → index.php")
        else:
            warnings.append("⚠️  Redirection index non configurée")
    else:
        warnings.append("⚠️  .htaccess introuvable")
    
    # 5. Afficher le résumé
    print("\n🎯 RÉSUMÉ DE VALIDATION")
    print("=" * 40)
    
    print(f"\n✅ SUCCÈS ({len(successes)}):")
    for success in successes:
        print(f"  {success}")
    
    if warnings:
        print(f"\n⚠️  AVERTISSEMENTS ({len(warnings)}):")
        for warning in warnings:
            print(f"  {warning}")
    
    if errors:
        print(f"\n❌ ERREURS ({len(errors)}):")
        for error in errors:
            print(f"  {error}")
        print(f"\n🚨 {len(errors)} erreur(s) critique(s) à corriger avant déploiement!")
        return False
    else:
        print(f"\n🎉 VALIDATION RÉUSSIE!")
        print("✅ Tous les fichiers sont prêts pour le déploiement")
        print("🚀 Vous pouvez maintenant les envoyer sur votre serveur OVH")
        return True

if __name__ == "__main__":
    validate_php_files()