from instagrapi import Client
import os
import time
import random

def load_or_login(username, password):
    cl = Client()
    settings_file = f"C:/inetpub/wwwroot/Bot/Instagram/sessions/{username}_settings.json"

    if os.path.exists(settings_file):
        print("🔄 در حال بارگذاری تنظیمات ذخیره‌شده...")
        try:
            cl.load_settings(settings_file)
            cl.login(username, password)
            print("✅ لاگین با موفقیت از طریق تنظیمات قبلی")
            return cl
        except Exception as e:
            print(f"⚠️ خطا در لاگین با تنظیمات قبلی: {e}")
    
    print("🔐 ورود مجدد با رمز و ذخیره تنظیمات...")
    cl.login(username, password)
    cl.dump_settings(settings_file)
    print("✅ تنظیمات جدید ذخیره شدند.")
    return cl

def download_instagram_reel(cl, url, download_folder):
    # استخراج شورتکد از لینک
    parts = url.strip("/").split("/")
    try:
        index_reel = parts.index("reel")
        shortcode = parts[index_reel + 1]
    except (ValueError, IndexError):
        raise ValueError("❌ شورتکد قابل استخراج از لینک نیست.")
    
    print(f"⭐ در حال دریافت اطلاعات ریل: {shortcode}")
    # تبدیل شورتکد به media_pk (شناسه عددی) با استفاده از متد موجود
    media_pk = cl.media_pk_from_code(shortcode)
    media_info = cl.media_info(media_pk)
    
    os.makedirs(download_folder, exist_ok=True)
    # دانلود ریل با استفاده از متد clip_download
    cl.clip_download(media_info.pk, folder=download_folder)
    print(f"✅ دانلود انجام شد در مسیر: {download_folder}")

# اطلاعات ورود و لینک
username = "gal1ver"
password = "Gal1verinstal0v3"
reel_url = "https://www.instagram.com/reel/DIZBE53IMUU/?igsh=d3A3cnVyNXBsODhs"
download_folder = "C:/inetpub/wwwroot/Bot/Instagram"

# اجرای برنامه
cl = load_or_login(username, password)

# تنظیم request_timeout به صورت یک عدد صحیح (ثانیه)
cl.request_timeout = 10

time.sleep(random.uniform(5, 10))  # ⏳ استراحت برای جلوگیری از رفتار ربات‌گونه
download_instagram_reel(cl, reel_url, download_folder)
