o
    di0                     @  s   d dl mZ d dlmZ d dlmZ d dlmZ ddlm	Z	 ddl
mZmZ d dlZd*ddZd+ddZd,ddZd-d.ddZd-d.ddZd*ddZd/d d!Zd/d"d#Zd/d$d%Zd0d(d)ZdS )1    )annotations)Path)Optional)Page   )shot)log_steppauseNpager   returnNonec                 C  s   | j ddd d S )Nz%() => location.href.includes('/ims/')i0u  timeoutwait_for_functionr
    r   _/var/www/html/flask_server/apps/aroflo_connector_app/ui_automation/flows/timesheet_select_bu.py_wait_ims_ready   s   r   boolc                 C  s*   z
|  d dkW S  ty   Y dS w )N#imsBUNavigationBtnr   F)locatorcount	Exceptionr   r   r   r   _header_bu_exists   s
   r   Optional[str]c                 C  sJ   z|  dj}| dkrW d S |  }|pd W S  ty$   Y d S w )Nz&#imsBUNavigationBtn .af-truncate--textr   )r   firstr   
inner_textstripr   )r
   eltr   r   r   _get_current_bu_from_header   s   
r!   a  	target_bustr
timeout_msintc                 C  s   | j d||d d S )Nz(target) => {
            const el = document.querySelector("#imsBUNavigationBtn .af-truncate--text");
            if (!el) return false;
            return (el.textContent || "").trim() === target;
        }argr   r   r
   r#   r%   r   r   r   _wait_bu_applied_header$   s
   
r*   c                 C  s   | j d||d dS )u  
    En tu HTML aparece:
      Tawk_API.setAttributes({"currentbu":"Utility Solutions Group", ...})
    Entonces podemos esperar a que exista "currentbu":"Telecommunications" en scripts/body.
    Es menos elegante, pero sirve como señal cuando el header dropdown no está.
    a  (target) => {
            const txt = document.documentElement ? (document.documentElement.innerHTML || "") : "";
            return txt.includes('"currentbu":"'+target+'"') || txt.includes("'currentbu':'"+target+"'") || txt.includes('currentbu":"'+target);
        }r'   Nr   r)   r   r   r   _wait_bu_applied_by_tawk0   s
   
r+   c                 C  sH   |  dj}| dkrtd|jddd |  djjdd	d
 d S )Nr   r   z,No existe #imsBUNavigationBtn en esta vista.ip  Tr   forcezul[data-bu-selector]visiblei'  )stater   )r   r   r   RuntimeErrorclickwait_for)r
   btnr   r   r   _open_bu_menuB   s
   r4   c                 C  s   | j d|dd d S )Na  (target) => {
            const uls = Array.from(document.querySelectorAll("ul[data-bu-selector]"));
            for (const ul of uls) {
                const items = ul.querySelectorAll("li, a, button");
                if (!items || items.length === 0) continue;
                const hit = Array.from(items).some(el => (el.textContent || "").trim() === target);
                if (hit) return true;
            }
            const menuItems = Array.from(document.querySelectorAll("[role='menuitem'], [role='option']"));
            if (menuItems.length > 0) {
                return menuItems.some(el => (el.textContent || "").trim() === target);
            }
            return false;
        }r"   r'   r   )r
   r#   r   r   r   _wait_menu_has_targetM   s
   
r5   c                 C  s   |  djtdt| ddj}| dkr$|  dj|dj}| dkr2td| d|dp8d	}t|}|j	d
dd z|rR| j
t|dd W n	 ty\   Y nw z	| jddd W n	 tyo   Y nw | d d S )Nzul[data-bu-selector] az^\s*z\s*$has_textr   u#   No encontré el link (<a>) del BU 'u   ' en el menú dropdown.href @  Tr,   i:  r   domcontentloaded  )r   filterrecompileescaper   r   r0   get_attributer1   wait_for_urlr   wait_for_load_statewait_for_timeout)r
   r#   ar8   href_escapedr   r   r   _click_target_bu_dropdownb   s2   
rG   c                 C  s   |  dj|dj}| dkrtd| d| jddd |jd	d
d W d   n1 s1w   Y  z	| jddd W n	 tyH   Y nw | 	d dS )zk
    HTML real:
      <td> <a href="/ims/Site/Home/index.cfm?view=1&hhsJID=...">Telecommunications</a>
    za[href*='hhsJID=']r6   r   u   No encontré link de BU 'z#' en la tabla (a[href*='hhsJID=']).r;   i N  )
wait_untilr   r:   Tr,   Nnetworkidler   r<   )
r   r=   r   r   r0   expect_navigationr1   rC   r   rD   )r
   r#   linkr   r   r   _click_bu_from_dashboard_table   s   rL   run_dirr   c                C  sR  |pd  }|s
d S t|  t| r(t| }|r(|  |kr(td| |  d S t| |d|  td| |  t|d|  t| rrtd| |  t|  t| | t| |d|  td| |  t	| | t
| | ntd| |  t| | t| rt
| | nt| | t| |d|  td| |  t|d	|  d S )
Nr9   zts-bu-already-zts-bu-01-before-zBefore selecting BU: zts-bu-mode-dropdown-zts-bu-02-menu-open-zts-bu-mode-dashboard-table-zts-bu-03-after-zAfter selecting BU: )r   r   r   r!   r   r   r	   r4   r5   rG   r*   rL   r+   )r
   cfgrM   r#   curr   r   r   run   s8   



rP   )r
   r   r   r   )r
   r   r   r   )r
   r   r   r   )r"   )r
   r   r#   r$   r%   r&   r   r   )r
   r   r#   r$   r   r   )r
   r   rM   r   r#   r$   r   r   )
__future__r   pathlibr   typingr   playwright.sync_apir   core.artifactsr   core.logr   r	   r>   r   r   r!   r*   r+   r4   r5   rG   rL   rP   r   r   r   r   <module>   s"   






)