from instagrapi import Client
import json
import time
import os
import random

proxies_file   = r"C:\inetpub\wwwroot\Bot\Instagram\proxies.txt"
accounts_file   = r"C:\inetpub\wwwroot\Bot\Instagram\accounts.txt"


# بارگذاری پروکسی‌ها
def load_proxies(file=proxies_file):
    with open(file) as f:
        return [line.strip() for line in f if line.strip()]

# بارگذاری اکانت‌ها
def load_accounts(file=accounts_file):
    with open(file) as f:
        return [tuple(line.strip().split(',')) for line in f if line.strip()]

# شبیه‌سازی User-Agent مرورگر
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_2_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
]

# ذخیره کوکی‌ها در فایل
def save_session(client: Client, username: str):
    session_dir = r"C:\inetpub\wwwroot\Bot\Instagram\sessions"
    os.makedirs(session_dir, exist_ok=True)
    path = os.path.join(session_dir, f"{username}.json")
    with open(path, "w") as f:
        json.dump(client.get_settings(), f)
    print(f"[✓] Session saved for {username}")

# لاگین با اکانت و پروکسی
def login_with_proxy(proxy, username, password):
    cl = Client()
    cl.set_proxy(proxy)
    cl.set_user_agent(random.choice(USER_AGENTS))

    try:
        cl.login(username, password)
        save_session(cl, username)
        return True
    except Exception as e:
        print(f"[✗] Failed to login {username} with proxy {proxy}: {e}")
        return False

def main():
    proxies = load_proxies()
    accounts = load_accounts()

    if len(proxies) * 2 < len(accounts):
        print("[!] تعداد اکانت‌ها از ظرفیت پروکسی‌ها بیشتره (۲ اکانت برای هر پروکسی)")
        return

    account_index = 0
    for proxy in proxies:
        for _ in range(2):  # هر پروکسی ۲ اکانت
            if account_index >= len(accounts):
                break
            username, password = accounts[account_index]
            print(f"[*] Trying {username} on proxy {proxy}")
            login_with_proxy(proxy, username, password)
            account_index += 1
            time.sleep(random.uniform(5, 10))  # جلوگیری از بلاک

if __name__ == "__main__":
    main()
