import aiosqlite
from aiogram import Bot
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.types import InlineKeyboardButton
from config import DB_PATH

async def check_user_sub(bot: Bot, user_id: int) -> tuple[bool, list[dict]]:
    """بررسی عضویت کاربر در تمامی کانال‌های اسپانسری تعریف‌شده در دیتابیس"""
    async with aiosqlite.connect(DB_PATH) as db:
        async with db.execute("SELECT channel_id, title, invite_link FROM sponsor_channels") as cursor:
            sponsors = await cursor.fetchall()

    if not sponsors:
        return True, []

    unsubscribed_channels = []
    for ch_id, title, invite_link in sponsors:
        try:
            member = await bot.get_chat_member(chat_id=ch_id, user_id=user_id)
            if member.status in ["left", "kicked"]:
                unsubscribed_channels.append({"title": title, "url": invite_link})
        except Exception:
            # در صورت عدم دسترسی ربات به کانال، آن را رد می‌کند
            pass

    is_subbed = (len(unsubscribed_channels) == 0)
    return is_subbed, unsubscribed_channels

def get_join_channels_keyboard(channels: list[dict]):
    builder = InlineKeyboardBuilder()
    for ch in channels:
        builder.row(InlineKeyboardButton(text=f"📢 عضویت در {ch['title']}", url=ch["url"]))
    builder.row(InlineKeyboardButton(text="✅ بررسی عضویت و شروع", callback_data="check_subscription"))
    return builder.as_markup()