#!/usr/bin/env python3
"""
Script de test pour vérifier les redirections 301
Teste que les anciennes URLs redirigent correctement vers les nouvelles
"""

import requests
import sys
from urllib.parse import urljoin

# Configuration
BASE_URL = "https://www.duhaz.fr"
TEST_MODE = True  # Mettre False pour tester en production

# URLs à tester
test_urls = {
    "Ancienne catégorie avec /": {
        "url": "/blog/category/django/",
        "expected_redirect": "/blog/cat/django",
        "status_code": 301
    },
    "Ancienne catégorie sans /": {
        "url": "/blog/category/django",
        "expected_redirect": "/blog/cat/django",
        "status_code": 301
    },
    "Tag avec trailing slash": {
        "url": "/blog/tag/linux/",
        "expected_redirect": "/blog/tag/linux",
        "status_code": 301
    },
    "Article avec trailing slash": {
        "url": "/blog/comment-generer-des-cles-ssh-pour-lautorisation-git/",
        "expected_redirect": "/blog/comment-generer-des-cles-ssh-pour-lautorisation-git",
        "status_code": 301
    }
}

def test_redirections():
    """Teste toutes les redirections"""
    print("=" * 70)
    print("TEST DES REDIRECTIONS 301")
    print("=" * 70)
    print(f"\nBase URL: {BASE_URL}")
    print(f"Mode: {'TEST (local)' if TEST_MODE else 'PRODUCTION'}\n")
    
    success = 0
    failures = 0
    
    for test_name, test_data in test_urls.items():
        url = urljoin(BASE_URL, test_data['url'])
        expected_redirect = urljoin(BASE_URL, test_data['expected_redirect'])
        
        print(f"Test: {test_name}")
        print(f"  URL: {test_data['url']}")
        
        try:
            # Ne pas suivre les redirections automatiquement
            response = requests.get(url, allow_redirects=False, timeout=10)
            
            # Vérifier le code de statut
            if response.status_code == test_data['status_code']:
                print(f"  ✓ Code de statut: {response.status_code} (OK)")
                
                # Vérifier la destination de la redirection
                if 'Location' in response.headers:
                    redirect_location = response.headers['Location']
                    
                    # Normaliser l'URL de redirection (enlever le domaine si présent)
                    if redirect_location.startswith('http'):
                        # URL absolue
                        actual_redirect = redirect_location
                    else:
                        # URL relative, la convertir en absolue
                        actual_redirect = urljoin(BASE_URL, redirect_location)
                    
                    if actual_redirect == expected_redirect:
                        print(f"  ✓ Redirection: {redirect_location} (OK)")
                        print("  ✓ TEST RÉUSSI\n")
                        success += 1
                    else:
                        print(f"  ✗ Redirection attendue: {test_data['expected_redirect']}")
                        print(f"  ✗ Redirection reçue: {redirect_location}")
                        print("  ✗ TEST ÉCHOUÉ\n")
                        failures += 1
                else:
                    print(f"  ✗ Pas d'en-tête Location dans la réponse")
                    print("  ✗ TEST ÉCHOUÉ\n")
                    failures += 1
            else:
                print(f"  ✗ Code de statut: {response.status_code} (attendu: {test_data['status_code']})")
                print("  ✗ TEST ÉCHOUÉ\n")
                failures += 1
                
        except requests.RequestException as e:
            print(f"  ✗ Erreur de connexion: {e}")
            print("  ✗ TEST ÉCHOUÉ\n")
            failures += 1
    
    # Résumé
    print("=" * 70)
    print("RÉSUMÉ")
    print("=" * 70)
    print(f"Tests réussis: {success}/{len(test_urls)}")
    print(f"Tests échoués: {failures}/{len(test_urls)}")
    
    if failures == 0:
        print("\n✓ Tous les tests sont passés avec succès !")
        return 0
    else:
        print(f"\n✗ {failures} test(s) ont échoué")
        return 1


if __name__ == "__main__":
    print("\n⚠️  IMPORTANT: Assurez-vous que le serveur Django est démarré !")
    print("⚠️  Si vous testez en local, modifiez BASE_URL dans le script\n")
    
    input("Appuyez sur Entrée pour continuer...")
    
    exit_code = test_redirections()
    sys.exit(exit_code)
