# /apps/aroflo_connector_app/ui_automation/commands/users_nav.py
from __future__ import annotations

from playwright.sync_api import sync_playwright

from ..core.artifacts import create_run_dir, shot
from ..core.browser import launch_browser_context
from ..core.log import log_step, pause
from ..auth.session import ensure_logged_in
from ..flows.users_nav import run as users_nav_flow_run
from ..flows.users_select_user import users_select_user_by_email


def cmd_users_nav(cfg, mfa_code: str = "") -> int:
    run_dir = create_run_dir(cfg, "users-nav")

    with sync_playwright() as p:
        browser, context = launch_browser_context(p, cfg, storage_state=str(cfg.state_file))
        page = context.new_page()

        allow_mfa = bool(getattr(cfg, "pause_on_mfa", False))
        ensure_logged_in(page, cfg, run_dir, mfa_code=mfa_code, allow_mfa=allow_mfa)

        shot(page, run_dir, "users-nav-00-auth-ok")
        log_step("users-nav-00-auth-ok", page)
        pause(cfg, "Authenticated OK, starting Users navigation")

        # 1) navegar a Manage -> Users (listado)
        users_nav_flow_run(page, cfg, run_dir)

        # 2) si pidieron email, seleccionar/validar usuario
        if getattr(cfg, "user_email", ""):
            email = cfg.user_email.strip()
            result = users_select_user_by_email(
                page,
                email=email,
                run_dir=run_dir,
                max_pages=30,
                timeout_ms=8000,
                screenshot_on_fail=True,
            )

            if not result.found:
                shot(page, run_dir, "users-step4-user-not-found")
                log_step("users-step4-user-not-found", page)
                raise RuntimeError(f"User not found by email: {email}")

            shot(page, run_dir, "users-step4-user-selected")
            log_step("users-step4-user-selected", page)


        # guardar storage state actualizado
        try:
            context.storage_state(path=str(cfg.state_file))
        except Exception:
            pass

        try:
            context.close()
        except Exception:
            pass

        try:
            browser.close()
        except Exception:
            pass

    return 0
