#!/usr/bin/env python
"""
Script de test pour valider les métadonnées Open Graph
Lance le serveur Django et teste les métadonnées d'un article
"""

import os
import sys
import django

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

from blog.models import Blog
from blog.seo_helpers import SEOMetadata
from django.test import RequestFactory
import json


def test_article_metadata():
    """Teste les métadonnées d'un article"""
    
    # Récupérer le premier article publié
    try:
        article = Blog.objects.filter(b_publier=True).first()
        
        if not article:
            print("❌ Aucun article publié trouvé dans la base de données")
            return False
        
        print(f"\n📝 Test des métadonnées pour : {article.b_titre}")
        print("=" * 80)
        
        # Créer une fausse requête
        factory = RequestFactory()
        request = factory.get(f'/blog/{article.b_titre_slugify}/')
        
        # Générer les métadonnées
        seo_helper = SEOMetadata(request, article)
        metadata = seo_helper.get_blog_metadata(article)
        
        # Validation des métadonnées essentielles
        checks = {
            'Titre': metadata.get('title'),
            'Description': metadata.get('description'),
            'URL Canonique': metadata.get('canonical_url'),
            'Image': metadata.get('image'),
            'Image Alt': metadata.get('image_alt'),
        }
        
        print("\n✅ Métadonnées de base :")
        for key, value in checks.items():
            status = "✓" if value else "✗"
            print(f"  {status} {key}: {value[:80] if value else 'MANQUANT'}...")
        
        # Validation Open Graph
        og = metadata.get('og', {})
        print("\n✅ Open Graph (Facebook) :")
        og_checks = {
            'Type': og.get('type'),
            'Titre': og.get('title'),
            'Description': og.get('description'),
            'URL': og.get('url'),
            'Image': og.get('image'),
            'Image Alt': og.get('image:alt'),
            'Image Width': og.get('image:width'),
            'Image Height': og.get('image:height'),
            'Site Name': og.get('site_name'),
            'Locale': og.get('locale'),
        }
        
        for key, value in og_checks.items():
            status = "✓" if value else "✗"
            print(f"  {status} {key}: {value}")
        
        # Validation Twitter Card
        twitter = metadata.get('twitter', {})
        print("\n✅ Twitter Card :")
        twitter_checks = {
            'Card Type': twitter.get('card'),
            'Titre': twitter.get('title'),
            'Description': twitter.get('description'),
            'Image': twitter.get('image'),
            'Image Alt': twitter.get('image:alt'),
            'Site': twitter.get('site'),
            'Creator': twitter.get('creator'),
        }
        
        for key, value in twitter_checks.items():
            status = "✓" if value else "✗"
            print(f"  {status} {key}: {value}")
        
        # Validation Schema.org
        schema = metadata.get('schema', {})
        print("\n✅ Schema.org (JSON-LD) :")
        schema_checks = {
            '@type': schema.get('@type'),
            'headline': schema.get('headline'),
            'datePublished': schema.get('datePublished'),
            'dateModified': schema.get('dateModified'),
            'author': schema.get('author', {}).get('name'),
            'publisher': schema.get('publisher', {}).get('name'),
        }
        
        for key, value in schema_checks.items():
            status = "✓" if value else "✗"
            print(f"  {status} {key}: {value}")
        
        # Afficher le JSON complet pour debug
        print("\n📋 JSON-LD complet :")
        print(json.dumps(schema, indent=2, ensure_ascii=False))
        
        # Liens de test
        print("\n🔗 Testez vos métadonnées avec ces outils :")
        article_url = f"https://www.duhaz.fr/blog/{article.b_titre_slugify}/"
        print(f"  • Facebook Debugger: https://developers.facebook.com/tools/debug/?q={article_url}")
        print(f"  • Twitter Validator: https://cards-dev.twitter.com/validator")
        print(f"  • LinkedIn Inspector: https://www.linkedin.com/post-inspector/inspect/{article_url}")
        print(f"  • OpenGraph Check: https://opengraphcheck.com/result.php?url={article_url}")
        
        print("\n" + "=" * 80)
        print("✅ Test terminé avec succès !")
        return True
        
    except Exception as e:
        print(f"\n❌ Erreur lors du test : {str(e)}")
        import traceback
        traceback.print_exc()
        return False


def list_all_articles():
    """Liste tous les articles disponibles"""
    articles = Blog.objects.filter(b_publier=True).order_by('-b_publdate')
    
    print("\n📚 Articles disponibles :")
    print("=" * 80)
    
    for i, article in enumerate(articles[:10], 1):
        has_image = "🖼️ " if article.b_description_img else "📄 "
        print(f"{i}. {has_image}{article.b_titre}")
        print(f"   URL: /blog/{article.b_titre_slugify}/")
        print(f"   Catégories: {', '.join([cat.cb_titre for cat in article.b_cat.all()])}")
        print()


if __name__ == '__main__':
    print("\n🧪 Test des métadonnées Open Graph - Blog Duhaz")
    
    if len(sys.argv) > 1 and sys.argv[1] == 'list':
        list_all_articles()
    else:
        success = test_article_metadata()
        sys.exit(0 if success else 1)
