# apps/aroflo_connector_app/ui_automation_zones/zones/timesheets/flows/nav.py
from __future__ import annotations

from pathlib import Path
from playwright.sync_api import Page

from ....core.artifacts import shot
from ....core.log import log_step, pause
from ....auth.post_login import handle_terminate_sessions
from ....common.selectors import officesite as officesite_sel
from ....common.selectors import bu as bu_sel
from ....common.officesite import manage as manage_menu
from ....common.officesite import home as home_menu
from ...timesheets import selectors as ts_sel


def run(page: Page, cfg, run_dir: Path) -> None:
    ts_sel.ensure_on_ims(page)
    handle_terminate_sessions(page, run_dir)

    # Asegurar OfficeSite por URL
    officesite_sel.ensure_officesite(page)

    shot(page, run_dir, "ts-nav-01-officesite")
    log_step("ts-nav-01-officesite", page)
    pause(cfg, "Timesheets nav: officesite ready")

    # Seleccionar BU si aplica
    target_bu = (getattr(cfg, "timesheet_bu", "") or "").strip()
    if target_bu:
        # Forzar Home antes de seleccionar BU (dropdown suele estar en Home)
        home_menu.ensure_home(page)
        bu_sel.select_bu(page, cfg, run_dir, target_bu=target_bu, tag_prefix="ts-bu")

    # Click Manage
    manage_menu.open_manage_menu(page)
    page.wait_for_timeout(350)

    shot(page, run_dir, "ts-nav-02-manage-clicked")
    log_step("ts-nav-02-manage-clicked", page)
    pause(cfg, "Timesheets nav: manage clicked")

    # Click Timesheets
    manage_menu.click_timesheets(page)

    # Espera landing
    page.wait_for_function(
        """() => {
            const u = location.href.toLowerCase();
            if (!u.includes('timesheet')) return false;
            const t = document.body && (document.body.innerText || '');
            return t.includes('Daily Timesheet') || t.includes('Timesheet for');
        }""",
        timeout=45_000,
    )

    shot(page, run_dir, "ts-nav-03-timesheets-ready")
    log_step("ts-nav-03-timesheets-ready", page)
    pause(cfg, "Timesheets nav: ready")
