import subprocess
import sys
import os
import time
import urllib.request
import urllib.parse

# ─── تنظیمات ───────────────────────────────────────────────
SCRIPT      = "admin_channel.py"
REQ_FILE    = "requirements_channel.txt"
BOT_TOKEN   = "6858670738:AAHnkrZ6Ub8v78AzGUNezn7e-uqYRptU5Ug"   # همان توکن داخل admin_channel.py
ADMIN_ID    = 647637742                                              # همان ADMIN_ID داخل admin_channel.py
# ────────────────────────────────────────────────────────────

def send_telegram(text: str):
    """ارسال نوتیف ساده به ادمین"""
    try:
        data = urllib.parse.urlencode({
            "chat_id": ADMIN_ID,
            "text": text,
            "parse_mode": "HTML"
        }).encode("utf-8")
        req = urllib.request.Request(
            f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage", data=data
        )
        urllib.request.urlopen(req, timeout=10)
    except Exception as e:
        print(f"[Telegram alert failed] {e}")

def install_requirements():
    """نصب/بروزرسانی پکیج‌های مورد نیاز"""
    if not os.path.exists(REQ_FILE):
        print(f"[Runner] فایل {REQ_FILE} یافت نشد، ادامه بدون نصب...")
        return
    print(f"[Runner] در حال نصب requirements از {REQ_FILE} ...")
    result = subprocess.run(
        [sys.executable, "-m", "pip", "install", "-r", REQ_FILE, "--quiet", "--upgrade"],
        capture_output=True, text=True
    )
    if result.returncode == 0:
        print("[Runner] ✅ همه پکیج‌ها با موفقیت نصب/بروزرسانی شدند.")
    else:
        print(f"[Runner] ⚠️ خطا در نصب پکیج‌ها:\n{result.stderr}")

def run():
    print("=" * 50)
    print("  Channel Assistant Runner")
    print("=" * 50)

    # ابتدا requirements نصب کن
    install_requirements()

    restart_count = 0
    last_restart_time = time.time()

    send_telegram("🚀 <b>[Channel Runner]</b> ربات مدیریت کانال راه‌اندازی شد.")

    while True:
        print(f"\n[Runner] در حال اجرای {SCRIPT} ...")

        env = os.environ.copy()
        env["PYTHONIOENCODING"] = "utf-8"

        process = subprocess.Popen(
            [sys.executable, SCRIPT],
            env=env
        )
        exit_code = process.wait()
        now = time.time()

        print(f"[Runner] پروسه با کد {exit_code} متوقف شد.")

        # شمارش ری‌استارت در یک دقیقه اخیر
        if now - last_restart_time < 60:
            restart_count += 1
        else:
            restart_count = 1
        last_restart_time = now

        if restart_count >= 5:
            msg = (
                "🚨 <b>[Channel Runner]</b> ربات بیش از ۵ بار در یک دقیقه کرش کرد!\n"
                "برای جلوگیری از loop، ۶۰ ثانیه صبر می‌کنم..."
            )
            print(f"[Runner] {msg}")
            send_telegram(msg)
            time.sleep(60)
            restart_count = 0
        else:
            send_telegram(
                f"❌ <b>[Channel Runner]</b> ربات متوقف شد (کد: <code>{exit_code}</code>)\n"
                "🔄 راه‌اندازی مجدد در ۵ ثانیه..."
            )
            print("[Runner] راه‌اندازی مجدد در ۵ ثانیه...")
            time.sleep(5)

if __name__ == "__main__":
    run()
