from __future__ import annotations

from playwright.sync_api import Page

from ...selectors import siteadministration as siteadmin_sel


def ensure_settings_page(page: Page) -> None:
    url = (page.url or "").lower()
    if "siteadm.set" in url or "/ims/siteadmin/settings" in url:
        return

    siteadmin_sel.ensure_siteadministration(page)

    menu = page.locator("[data-aroflo-menuitem='Settings']")
    if menu.count() == 0:
        menu = page.get_by_role("link", name="Settings")
    menu.first.click(timeout=5000, force=True)

    page.wait_for_function(
        "() => location.href.toLowerCase().includes('siteadm.set') || location.href.toLowerCase().includes('/ims/siteadmin/settings')",
        timeout=45_000,
    )


def click_settings_group(page: Page, key: str, label: str) -> None:
    page.wait_for_selector("#settingsTab", timeout=20_000)
    # Clear search filter so all groups are visible
    try:
        search = page.locator("#inpSearch")
        if search.count():
            search.first.fill("")
            page.evaluate(
                "() => { const i = document.querySelector('#inpSearch'); if (i) i.dispatchEvent(new Event('input', {bubbles:true})); }"
            )
    except Exception:
        pass

    loc = page.locator(
        f"#settingsTab li.btnOneSettingGroup[data-aroflo-settingstab='{key}']"
    )
    if loc.count() == 0:
        loc = page.locator(
            f"#settingsTab li.btnOneSettingGroup[data-settinggroupkey='{key}']"
        )
    if loc.count() == 0:
        loc = page.locator("#settingsTab li.btnOneSettingGroup", has_text=label)

    if loc.count() == 0:
        raise RuntimeError(f"Settings group not found: {label}")

    target = loc.first
    try:
        target.scroll_into_view_if_needed(timeout=3000)
    except Exception:
        pass
    target.click(timeout=5000, force=True)

    page.wait_for_function(
        """(k) => {
            const el = document.querySelector(`#settingArea [data-aroflo-settingsgroup='${k}']`);
            return !!el;
        }""",
        arg=key,
        timeout=20_000,
    )
