#!/usr/bin/env python3
"""
Test de téléchargement d'une vidéo Instagram avec instaloader
"""

import subprocess
import json
import logging
import os
import time
import re
from datetime import datetime

# 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 instaloader"""
    
    logger.info(f"🔄 Téléchargement depuis Instagram: {url}")
    
    # Vérifier si instaloader est installé
    try:
        import instaloader
    except ImportError:
        logger.info("Installation de instaloader...")
        process = subprocess.Popen(
            ['pip', 'install', 'instaloader'],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
        stdout, stderr = process.communicate()
        
        if process.returncode != 0:
            logger.error("❌ Erreur lors de l'installation de instaloader")
            logger.error(stderr.decode())
            return None
            
        import instaloader
    
    # 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:
        # Créer une instance de Instaloader
        L = instaloader.Instaloader(
            dirname_pattern=output_dir,
            filename_pattern=f"video_{int(time.time())}",
            download_video_thumbnails=False,
            download_geotags=False,
            download_comments=False,
            save_metadata=False,
            post_metadata_txt_pattern="",
            max_connection_attempts=3
        )
        
        # Télécharger le post
        logger.info("🔄 Téléchargement de la vidéo...")
        post = instaloader.Post.from_shortcode(L.context, post_id)
        
        # Vérifier si c'est une vidéo
        if not post.is_video:
            logger.error("❌ Ce post n'est pas une vidéo")
            return None
            
        # Télécharger la vidéo
        L.download_post(post, target=output_dir)
        
        # Trouver le fichier téléchargé (il aura .mp4 comme extension)
        video_file = None
        for file in os.listdir(output_dir):
            if file.endswith('.mp4') and str(int(time.time())) in file:
                video_file = os.path.join(output_dir, file)
                break
                
        if video_file and os.path.exists(video_file):
            logger.info(f"✅ Vidéo téléchargée: {video_file}")
            return video_file
        else:
            logger.error("❌ Fichier vidéo non trouvé après le téléchargement")
            return None
            
    except instaloader.exceptions.InstaloaderException as e:
        logger.error(f"❌ Erreur Instaloader: {str(e)}")
        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")
