"""
سكريبت تحقق فقط (قراءة بدون أي تعديل) — يتحقق من تطابق قنوات الاشتراك
الإجباري مع جدول القنوات باستخدام نفس دالة norm_ch_key المستخدمة فعلياً
في الإصلاح، للتأكد أن المنطق الجديد يستثني القنوات الصحيحة قبل تشغيل
"مغادرة كل القنوات" على حسابات حقيقية.

الاستخدام: python3 check_force_sub_match.py
"""
import asyncio
import sys

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


async def main():
    con = await asyncpg.connect(PG_DSN)

    force_sub_rows = await con.fetch(
        "SELECT bot_username, url, channel_id FROM force_sub_channels"
    )
    channels_rows = await con.fetch(
        "SELECT id, username, url FROM channels"
    )
    await con.close()

    # نفس المنطق المستخدم في do_leave_all بالضبط
    force_sub_keys = {norm_ch_key(r["url"]) for r in force_sub_rows if r["url"]}
    force_sub_ids = {int(r["channel_id"]) for r in force_sub_rows if r["channel_id"] is not None}

    print("=" * 60)
    print(f"📊 إجمالي قنوات الاشتراك الإجباري المسجّلة: {len(force_sub_rows)}")
    print(f"📊 إجمالي القنوات المسجّلة في channels: {len(channels_rows)}")
    print("-" * 60)

    matched = []
    for ch in channels_rows:
        key = norm_ch_key(ch["url"] or "")
        by_key = key in force_sub_keys
        by_id = ch["id"] is not None and int(ch["id"]) in force_sub_ids
        if by_key or by_id:
            matched.append(ch)

    print(f"✅ قنوات ستُستثنى فعلياً من 'مغادرة كل القنوات' (اشتراك إجباري): {len(matched)}")
    for ch in matched:
        print(f"   • id={ch['id']} | username={ch['username']} | url={ch['url']}")

    # روابط اشتراك إجباري مسجّلة لكن لا تطابق أي صف في channels إطلاقاً
    # (لا تشكّل خطراً على do_leave_all لأنها أصلاً غير موجودة في channels،
    # لكن نعرضها هنا للمراجعة فقط — قد تكون قنوات لم تُرصد بعد أو رُصدت بخطأ)
    orphan_force_sub = []
    channel_keys = {norm_ch_key(c["url"] or "") for c in channels_rows}
    channel_ids = {int(c["id"]) for c in channels_rows if c["id"] is not None}
    for r in force_sub_rows:
        key = norm_ch_key(r["url"] or "")
        cid = int(r["channel_id"]) if r["channel_id"] is not None else None
        if key not in channel_keys and (cid is None or cid not in channel_ids):
            orphan_force_sub.append(r)

    print("-" * 60)
    print(f"ℹ️  روابط اشتراك إجباري لا تطابق أي قناة في channels حالياً: {len(orphan_force_sub)}")
    for r in orphan_force_sub[:20]:
        print(f"   • bot={r['bot_username']} | url={r['url']} | channel_id={r['channel_id']}")
    if len(orphan_force_sub) > 20:
        print(f"   ... و{len(orphan_force_sub) - 20} أخرى")
    print("=" * 60)


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