#!/usr/bin/env python3
"""
Script de test pour le scraping Instagram - Version finale
"""

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import json
import logging
import time

# Configuration du logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def setup_driver():
    """Configure le driver Selenium avec des paramètres avancés"""
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument('--disable-blink-features=AutomationControlled')
    chrome_options.add_argument('--disable-web-security')
    
    # Headers spécifiques pour Instagram
    chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36')
    chrome_options.add_argument('--accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8')
    chrome_options.add_argument('--accept-language=fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7')
    
    # Anti-détection
    chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
    chrome_options.add_experimental_option('useAutomationExtension', False)
    
    driver = webdriver.Chrome(options=chrome_options)
    
    # Désactiver la détection webdriver et ajouter des propriétés de navigateur
    driver.execute_script("""
    Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
    Object.defineProperty(navigator, 'languages', {
        get: () => ['fr-FR', 'fr', 'en-US', 'en'],
    });
    """)
    
    return driver

def get_video_data(url):
    """Récupère les données de la vidéo Instagram"""
    driver = setup_driver()
    try:
        logger.info(f"🔍 Analyse du reel: {url}")
        
        # Charger d'abord la version embed qui est plus légère
        embed_url = url.replace("/reel/", "/reel/embed/")
        driver.get(embed_url)
        
        # Attendre que la page soit chargée
        time.sleep(3)
        
        # Code JavaScript pour obtenir la durée de la vidéo
        js_script = """
        let video = document.querySelector('video');
        if (!video) return null;
        
        // Forcer le chargement de la vidéo
        video.preload = 'metadata';
        video.load();
        video.play();
        video.pause();
        
        // Retourner la durée
        return Math.round(video.duration);
        """
        
        duration = driver.execute_script(js_script)
        
        if duration:
            logger.info(f"✅ Durée trouvée: {duration} secondes")
        
        # Récupérer la description des méta tags
        meta_tags = driver.find_elements(By.TAG_NAME, 'meta')
        description = None
        
        for meta in meta_tags:
            property_value = meta.get_attribute('property')
            if property_value and ('description' in property_value.lower()):
                description = meta.get_attribute('content')
                if description:
                    logger.info(f"✅ Description trouvée: {description[:100]}...")
                    
                    # Recherche des mots-clés
                    keywords = ["Palia", "CROSSPLAY"]
                    found_keywords = [kw for kw in keywords if kw in description]
                    if found_keywords:
                        logger.info(f"✅ Mots-clés trouvés: {', '.join(found_keywords)}")
                    break
        
        # Si on n'a pas trouvé la durée, essayer avec la page principale
        if not duration:
            driver.get(url)
            time.sleep(3)
            duration = driver.execute_script(js_script)
            if duration:
                logger.info(f"✅ Durée trouvée (page principale): {duration} secondes")
        
        return {
            "duration": duration,
            "description": description,
            "url": url
        }
            
    except Exception as e:
        logger.error(f"❌ Erreur: {str(e)}")
        return None
        
    finally:
        driver.quit()

if __name__ == "__main__":
    url = "https://www.instagram.com/reel/DMpc37-tJdF/"
    result = get_video_data(url)
    
    if result:
        print("\n📊 Résultats:")
        print(json.dumps(result, indent=2, ensure_ascii=False))
