import sys
import time
import urllib.parse
from playwright.sync_api import sync_playwright

if hasattr(sys.stdout, 'reconfigure'):
    sys.stdout.reconfigure(encoding='utf-8')

SEARCH_QUERIES = [
    "Du học sinh California",
    "Người Việt San Jose",
    "Cộng đồng người Việt California"
]

with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp("http://127.0.0.1:9224")
    page = browser.contexts[0].pages[0]

    joined_groups = []

    for query in SEARCH_QUERIES:
        encoded_q = urllib.parse.quote(query)
        search_url = f"https://www.facebook.com/search/groups/?q={encoded_q}"
        print(f"\n🔍 Đang tìm kiếm nhóm: '{query}' ({search_url})...")
        page.goto(search_url, wait_until="domcontentloaded", timeout=60000)
        page.wait_for_timeout(4000)

        # Cuộn nhẹ
        page.mouse.wheel(0, 400)
        page.wait_for_timeout(2000)

        # Tìm các nút "Join group" hoặc "Tham gia nhóm"
        join_btns = page.locator("div[aria-label*='Join group'], div[aria-label*='Tham gia nhóm'], div[role='button']:has-text('Join'), div[role='button']:has-text('Tham gia')")
        total_found = join_btns.count()
        print(f"Tìm thấy {total_found} nút tham gia nhóm.")

        for i in range(min(2, total_found)):
            btn = join_btns.nth(i)
            # Kiểm tra xem có phải nút Join không (tránh nút Joined / Đã tham gia)
            btn_text = btn.inner_text().strip().lower()
            btn_label = (btn.get_attribute("aria-label") or "").lower()
            
            if "joined" in btn_text or "đã tham gia" in btn_text or "joined" in btn_label:
                print(f"  [-] Nhóm [{i+1}] đã tham gia từ trước, bỏ qua.")
                continue

            if btn.is_visible():
                # Lấy tên nhóm gần nút này
                parent_card = btn.locator("xpath=ancestor::div[contains(@class, 'x1yztbdb') or contains(@class, 'x78zum5')][.//a[contains(@href, '/groups/')]]").last
                group_name = "Nhóm California"
                if parent_card.count() > 0:
                    group_link = parent_card.locator("a[href*='/groups/']").first
                    if group_link.count() > 0:
                        group_name = group_link.inner_text().split('\n')[0]

                print(f"  👉 Gửi yêu cầu tham gia: '{group_name}'...")
                btn.click(force=True)
                joined_groups.append(group_name)
                page.wait_for_timeout(2500)

                # Nếu hiện popup câu hỏi gia nhập nhóm (membership questions)
                dialog = page.locator("div[role='dialog']")
                if dialog.count() > 0 and dialog.first.is_visible():
                    print("  📝 Phát hiện popup câu hỏi/quy định, xử lý...")
                    # Nếu có nút đồng ý điều khoản hoặc Submit
                    agree_check = dialog.locator("input[type='checkbox'], div[role='checkbox']").first
                    if agree_check.is_visible():
                        agree_check.click(force=True)
                        page.wait_for_timeout(500)
                    submit_btn = dialog.locator("div[role='button']:has-text('Submit'), div[role='button']:has-text('Gửi'), div[role='button']:has-text('I agree')").first
                    if submit_btn.is_visible():
                        submit_btn.click(force=True)
                        page.wait_for_timeout(1500)
                    else:
                        page.keyboard.press("Escape")
                        page.wait_for_timeout(1000)

        # Nghỉ giữa các lượt search
        page.wait_for_timeout(2000)

    # Chụp ảnh tổng kết
    ss_path = "FacebookAutoPoster/cali_groups_joined.png"
    page.screenshot(path=ss_path)
    print(f"\n🎉 Đã gửi yêu cầu tham gia thành công các nhóm:\n" + "\n".join(f"- {g}" for g in joined_groups))
    print(f"📸 Saved: {ss_path}")
