"""
سكريبت تشخيص فقط (قراءة بدون أي تعديل) — يصنّف الحسابات المحظورة مؤخراً
حسب السبب، للتمييز بين:
  أ) حظر بسبب انتهاء مهلة الاتصال (المشكلة المحتملة — قد تكون حسابات سليمة)
  ب) حظر حقيقي مؤكد من تليجرام نفسه (USER_DEACTIVATED_BAN, AUTH_KEY_UNREGISTERED, إلخ)
  ج) حظر بسبب تلف فعلي مؤكد في ملف الجلسة (malformed/disk image)

الاستخدام: python3 check_recent_bans.py [عدد_الساعات]
مثال: python3 check_recent_bans.py 6   (آخر 6 ساعات فقط)
"""
import asyncio
import sys
from datetime import datetime, timedelta

sys.path.insert(0, "/var/www/kodo")
import asyncpg
from shared import PG_DSN


async def main():
    hours = int(sys.argv[1]) if len(sys.argv) > 1 else 24
    since = (datetime.now() - timedelta(hours=hours)).isoformat()

    con = await asyncpg.connect(PG_DSN)
    rows = await con.fetch(
        "SELECT phone, banned_at, reason FROM banned_accounts "
        "WHERE banned_at >= $1 ORDER BY banned_at DESC",
        since
    )
    await con.close()

    timeout_suspect = []
    genuine_telegram_ban = []
    corrupted_session = []
    other = []

    # هذه كل الأسباب التي يمكن أن تخرج من get_ban_reason() (حظر حقيقي مؤكد
    # من تليجرام نفسه) — بالعربية كما تُخزَّن فعلياً في القاعدة، وليس
    # بالإنجليزية كما كان التصنيف الأول يفترض خطأً.
    GENUINE_TELEGRAM_BAN_REASONS = {
        "محظور نهائياً", "تم تجميده", "حساب غير صالح (محذوف)", "مستخدم معطل",
        "معرف غير صالح (حساب محذوف)", "محظور", "الجلسة منتهية",
        "تم إلغاء الجلسة", "انتهت صلاحية الجلسة", "جلسة مكررة",
        "محظور في القناة", "الحساب غير صالح", "معرف غير صالح",
    }

    for r in rows:
        reason_raw = r["reason"] or ""
        reason = reason_raw.lower()
        if "مهلة الاتصال" in reason_raw or "timeout" in reason:
            timeout_suspect.append(r)
        elif reason_raw.strip() in GENUINE_TELEGRAM_BAN_REASONS:
            genuine_telegram_ban.append(r)
        elif "malformed" in reason or "disk image" in reason or "تالفة" in reason_raw or "eof" in reason:
            corrupted_session.append(r)
        else:
            other.append(r)

    print("=" * 65)
    print(f"📊 الحسابات المحظورة خلال آخر {hours} ساعة: {len(rows)}")
    print("-" * 65)
    print(f"⚠️  بسبب انتهاء مهلة الاتصال (مشكوك بها — قد تكون سليمة): {len(timeout_suspect)}")
    print(f"✅ حظر حقيقي مؤكد من تليجرام نفسه: {len(genuine_telegram_ban)}")
    print(f"💀 تلف فعلي مؤكد في ملف الجلسة: {len(corrupted_session)}")
    print(f"❓ أسباب أخرى غير مصنّفة: {len(other)}")
    print("-" * 65)

    if timeout_suspect:
        print(f"\n⚠️  عيّنة من الحسابات المشكوك بها ({min(15, len(timeout_suspect))} من {len(timeout_suspect)}):")
        for r in timeout_suspect[:15]:
            print(f"   • {r['phone']} | {r['banned_at']}")

    if other:
        print(f"\n❓ عيّنة من الأسباب غير المصنّفة ({min(10, len(other))} من {len(other)}):")
        for r in other[:10]:
            print(f"   • {r['phone']} | {r['reason']}")

    print("=" * 65)


if __name__ == "__main__":
    asyncio.run(main())
