from database.crud import get_setting
from core.config import config
from aiogram.utils.keyboard import InlineKeyboardBuilder

async def check_user_membership(bot, user_id: int, session) -> tuple[bool, list[str]]:
    # Admins are exempt
    if user_id in config.admin_ids:
        return True, []
        
    mandatory_ids_str = await get_setting(session, "mandatory_join_ids", "")
    if not mandatory_ids_str.strip():
        return True, []
        
    mandatory_links_str = await get_setting(session, "mandatory_join_links", "")
    
    ids = [x.strip() for x in mandatory_ids_str.split(",") if x.strip()]
    links = [x.strip() for x in mandatory_links_str.split(",") if x.strip()]
    
    unjoined_links = []
    
    for i, chat_id in enumerate(ids):
        target_chat = chat_id
        if chat_id.replace("-", "").isdigit():
            target_chat = int(chat_id)
            
        try:
            member = await bot.get_chat_member(chat_id=target_chat, user_id=user_id)
            if member.status not in ["member", "administrator", "creator"]:
                link = links[i] if i < len(links) else chat_id
                unjoined_links.append(link)
        except Exception as e:
            print(f"Error checking membership for chat {chat_id}: {e}")
            # Do not block the user if the check itself fails (e.g. bot not in chat, invalid chat id, etc.)
            pass
            
    if unjoined_links:
        return False, unjoined_links
    return True, []

def get_join_required_markup(unjoined_links: list[str]):
    builder = InlineKeyboardBuilder()
    
    for i, link in enumerate(unjoined_links, 1):
        btn_text = f"📢 عضویت در کانال {i}"
        if "t.me" in link or "http" in link:
            builder.button(text=btn_text, url=link)
        else:
            builder.button(text=f"📢 کانال {link}", url=f"https://t.me/{link.replace('@', '')}")
            
    builder.button(text="🔄 بررسی مجدد عضویت", callback_data="check_membership")
    builder.adjust(1)
    return builder.as_markup()
