#!/usr/bin/env python3
"""
Script de diagnostic du sitemap
Identifie pourquoi le sitemap est vide
"""

import os
import sys
from pathlib import Path

# Ajouter le répertoire parent au path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

# Configuration Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings')
import django
django.setup()

from blog.models import Blog, Cat_Blog
from core.models import Page
from django.contrib.sites.models import Site


def diagnose_sitemap():
    """Diagnostique les problèmes du sitemap"""
    print("\n" + "="*70)
    print("DIAGNOSTIC DU SITEMAP")
    print("="*70 + "\n")
    
    issues = []
    
    # 1. Vérifier django.contrib.sites
    print("1️⃣  Vérification de django.contrib.sites...")
    try:
        sites = Site.objects.all()
        if sites.exists():
            print(f"   ✅ {sites.count()} site(s) configuré(s)")
            for site in sites:
                print(f"      - ID: {site.id}, Domaine: {site.domain}, Nom: {site.name}")
                if site.domain != 'www.duhaz.fr' and site.domain != 'duhaz.fr':
                    issues.append(f"⚠️  Domaine du site incorrect : {site.domain}")
        else:
            issues.append("❌ Aucun site configuré dans django.contrib.sites")
            print("   ❌ Aucun site configuré !")
    except Exception as e:
        issues.append(f"❌ Erreur avec django.contrib.sites : {e}")
        print(f"   ❌ Erreur : {e}")
    
    # 2. Vérifier SITE_ID
    print("\n2️⃣  Vérification de SITE_ID...")
    from django.conf import settings
    if hasattr(settings, 'SITE_ID'):
        print(f"   ✅ SITE_ID = {settings.SITE_ID}")
    else:
        issues.append("❌ SITE_ID non défini dans settings.py")
        print("   ❌ SITE_ID non défini !")
    
    # 3. Vérifier les articles de blog
    print("\n3️⃣  Vérification des articles de blog...")
    try:
        blogs = Blog.objects.filter(b_publier=True)
        print(f"   ✅ {blogs.count()} article(s) publié(s)")
        if blogs.count() == 0:
            issues.append("⚠️  Aucun article publié trouvé")
        else:
            # Afficher les 3 premiers
            for blog in blogs[:3]:
                print(f"      - {blog.b_titre}")
    except Exception as e:
        issues.append(f"❌ Erreur avec les articles : {e}")
        print(f"   ❌ Erreur : {e}")
    
    # 4. Vérifier les catégories
    print("\n4️⃣  Vérification des catégories...")
    try:
        cats = Cat_Blog.objects.all()
        print(f"   ✅ {cats.count()} catégorie(s)")
        if cats.count() == 0:
            issues.append("⚠️  Aucune catégorie trouvée")
    except Exception as e:
        issues.append(f"❌ Erreur avec les catégories : {e}")
        print(f"   ❌ Erreur : {e}")
    
    # 5. Vérifier les pages
    print("\n5️⃣  Vérification des pages statiques...")
    try:
        pages = Page.objects.filter(p_publier=True, p_type='page')
        print(f"   ✅ {pages.count()} page(s) publiée(s)")
        if pages.count() == 0:
            issues.append("⚠️  Aucune page statique trouvée")
    except Exception as e:
        issues.append(f"❌ Erreur avec les pages : {e}")
        print(f"   ❌ Erreur : {e}")
    
    # 6. Tester la génération du sitemap
    print("\n6️⃣  Test de génération du sitemap...")
    try:
        from blog.sitemaps import BlogSitemap, CategorySitemap, PageSitemap, StaticViewSitemap
        
        blog_sitemap = BlogSitemap()
        blog_items = list(blog_sitemap.items())
        print(f"   ✅ BlogSitemap : {len(blog_items)} items")
        
        cat_sitemap = CategorySitemap()
        cat_items = list(cat_sitemap.items())
        print(f"   ✅ CategorySitemap : {len(cat_items)} items")
        
        page_sitemap = PageSitemap()
        page_items = list(page_sitemap.items())
        print(f"   ✅ PageSitemap : {len(page_items)} items")
        
        static_sitemap = StaticViewSitemap()
        static_items = list(static_sitemap.items())
        print(f"   ✅ StaticViewSitemap : {len(static_items)} items")
        
        total = len(blog_items) + len(cat_items) + len(page_items) + len(static_items)
        if total == 0:
            issues.append("❌ Le sitemap génère 0 items !")
        
    except Exception as e:
        issues.append(f"❌ Erreur lors de la génération : {e}")
        print(f"   ❌ Erreur : {e}")
        import traceback
        traceback.print_exc()
    
    # Résumé
    print("\n" + "="*70)
    print("RÉSUMÉ DU DIAGNOSTIC")
    print("="*70 + "\n")
    
    if issues:
        print("❌ PROBLÈMES DÉTECTÉS :\n")
        for issue in issues:
            print(f"   {issue}")
        
        print("\n" + "="*70)
        print("SOLUTIONS")
        print("="*70 + "\n")
        
        if "Aucun site configuré" in str(issues):
            print("🔧 Pour créer le site :")
            print("""
python manage.py shell
>>> from django.contrib.sites.models import Site
>>> Site.objects.create(id=1, domain='www.duhaz.fr', name='Mr Duhaz')
>>> exit()
            """)
        
        if "Domaine du site incorrect" in str(issues):
            print("🔧 Pour corriger le domaine :")
            print("""
python manage.py shell
>>> from django.contrib.sites.models import Site
>>> site = Site.objects.get(id=1)
>>> site.domain = 'www.duhaz.fr'
>>> site.name = 'Mr Duhaz'
>>> site.save()
>>> exit()
            """)
        
        if "Aucun article publié" in str(issues):
            print("⚠️  Vérifiez que vous avez des articles avec b_publier=True")
        
        return 1
    else:
        print("✅ Aucun problème détecté !")
        print("\nLe sitemap devrait fonctionner correctement.")
        print("Si le problème persiste, vérifiez :")
        print("   - Que le serveur a été redémarré")
        print("   - Les logs Django pour plus d'infos")
        return 0


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