#!/usr/bin/env python3
"""
Test de téléchargement d'une vidéo Instagram via l'extraction du HTML
"""

import subprocess
import json
import logging
import os
import time
import re

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

def extract_post_id(url):
    """Extrait l'ID du post Instagram depuis l'URL"""
    patterns = [
        r'instagram\.com/p/([^/]+)',
        r'instagram\.com/reel/([^/]+)',
    ]
    for pattern in patterns:
        match = re.search(pattern, url)
        if match:
            return match.group(1).split('/')[0]  # Enlever les paramètres d'URL
    return None

def download_instagram_video(url, output_dir="downloads"):
    """Télécharge une vidéo Instagram via l'extraction du HTML"""
    
    logger.info(f"🔄 Téléchargement depuis Instagram: {url}")
    
    # Créer le dossier de téléchargement s'il n'existe pas
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    
    # Extraire l'ID du post
    post_id = extract_post_id(url)
    if not post_id:
        logger.error("❌ URL Instagram invalide")
        return None
        
    try:
        # Obtenir la page HTML
        logger.info("Récupération des informations de la page...")
        # Headers et cookies Instagram
        headers = {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
            'Accept-Language': 'en-US,en;q=0.5',
            'User-Agent': 'Mozilla/5.0 (Linux; Android 11; SAMSUNG SM-G973U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/14.2 Chrome/87.0.4280.141 Mobile Safari/537.36',
            'DNT': '1',
            'Upgrade-Insecure-Requests': '1',
            'Sec-Fetch-Dest': 'document',
            'Sec-Fetch-Mode': 'navigate',
            'Sec-Fetch-Site': 'none',
            'Sec-Fetch-User': '?1',
            'Sec-GPC': '1'
        }

        # Construction de la commande curl
        html_cmd = ['curl']

        # Headers
        for k, v in headers.items():
            html_cmd.extend(['-H', f'{k}: {v}'])

        # Ajouter l'URL et les options
        html_cmd.extend([
            f'https://www.instagram.com/p/{post_id}/',
            '--cookie-jar', '/tmp/instagram_cookies.txt',  # Sauvegarder les cookies
            '--cookie', '/tmp/instagram_cookies.txt',      # Utiliser les cookies
            '--location',  # Suivre les redirections
            '--compressed',
            '-v'  # Mode verbeux pour le debug
        ])
        
        process = subprocess.Popen(html_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = process.communicate()
        
        if process.returncode != 0:
            logger.error(f"❌ Erreur lors de la récupération de la page: {stderr.decode()}")
            return None
        
        html_content = stdout.decode()
        
        # Chercher l'URL de la vidéo directement dans le HTML
        # Chercher l'URL de la vidéo directement dans le HTML
        video_match = None
        patterns = [
            r'video_url":"([^"]+)"',  # Format standard
            r'"video_url":"([^"]+)"',  # Format alternatif
            r'og:video"\s+content="([^"]+)"'  # Meta tag
        ]
        
        for pattern in patterns:
            match = re.search(pattern, html_content)
            if match:
                video_match = match
                break
                
        if not video_match:
            logger.error("❌ Impossible de trouver l'URL de la vidéo")
            logger.debug("Contenu HTML : " + html_content[:500] + "...")  # Afficher les 500 premiers caractères
            return None
            
        video_url = video_match.group(1).replace('\\u0026', '&')
        if not video_url:
            logger.error("❌ URL de la vidéo non trouvée")
            return None
            
        logger.info("✅ URL de la vidéo trouvée")
        
        # Télécharger la vidéo
        output_file = os.path.join(output_dir, f"video_{int(time.time())}.mp4")
        logger.info("🔄 Téléchargement de la vidéo...")
        
        download_cmd = [
            'curl',
            video_url,
            '-L',  # Suivre les redirections
            '-o', output_file,
            '-H', 'User-Agent: Mozilla/5.0 (Linux; Android 11; SAMSUNG SM-G973U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/14.2 Chrome/87.0.4280.141 Mobile Safari/537.36',
            '--compressed',
            '-s'  # Mode silencieux
        ]
        
        download_process = subprocess.Popen(download_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        stdout, stderr = download_process.communicate()
        
        if download_process.returncode == 0 and os.path.exists(output_file):
            logger.info(f"✅ Vidéo téléchargée: {output_file}")
            return output_file
        else:
            logger.error(f"❌ Erreur lors du téléchargement: {stderr.decode()}")
            return None
            
    except Exception as e:
        logger.error(f"❌ Erreur: {str(e)}")
        return None

if __name__ == "__main__":
    url = "https://www.instagram.com/reel/C2_Kh6mPmGl/"
    result = download_instagram_video(url)
    
    if result:
        print(f"\n✅ Vidéo téléchargée avec succès: {result}")
    else:
        print("\n❌ Échec du téléchargement")
