o
     Mfi                     @  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 eG dd	 d	Zd)ddZdd Zd*ddZd+ddZd,ddZ					d-d.d'd(ZdS )/    )annotations)	dataclass)Path)Page   )shot)log_stepc                   @  s.   e Zd ZU ded< dZded< dZded< dS )	UserSelectResultboolfoundr   int
page_indexNz
str | Nonematched_email)__name__
__module____qualname____annotations__r   r    r   r   ]/var/www/html/flask_server/apps/aroflo_connector_app/ui_automation/flows/users_select_user.pyr	      s   
 r	   sstrreturnc                 C  s   | pd   S )N )striplower)r   r   r   r   
_normalize   s   r   c                 C  s0   | j ddd | j dddd | jddd d S )Nztable#tblUsersi0u  timeouttable#tblUsers tbody trattached)stater   a  () => {
            const tbl = document.querySelector('table#tblUsers');
            if (!tbl) return false;
            const rows = Array.from(tbl.querySelectorAll('tbody tr'));
            if (rows.length === 0) return false;
            return rows.some(r => {
                const rect = r.getBoundingClientRect();
                const visible = !!(r.offsetParent) && rect.height > 0 && rect.width > 0;
                return visible;
            });
        })wait_for_selectorwait_for_function)pager   r   r   _wait_table_ready   s   
r$   r#   r   emailc                 C  s"   |   }| d}|j|dS )Nr   )has_text)r   r   locatorfilter)r#   r%   targetrowsr   r   r   _find_row_by_email/   s   
r+   r
   c              	   C  s   |  }| dj| dj| dj| djg}|D ].}z#| dkr'W q|jdd |d |j|d	d
 | d W  dS  tyJ   Y qw dS )u   
    Si la tabla tiene un input de búsqueda, úsalo.
    Esto reduce drásticamente paginación y hace la UI automation más rápida.
    zinput[type='search']zinput[placeholder*='Search']zinput[aria-label*='Search']zinput[name*='search']r   i  r   r      )delay   TF)	r   r'   firstcountclickfilltypewait_for_timeout	Exception)r#   r%   
candidatesinpr   r   r   _try_use_search_box8   s&   





r8   c              	   C  s   | j ddd| j ddd| dj| dj| dj| djg}|D ]"}z| d	kr/W q$|jd
d | d W  dS  tyF   Y q$w dS )zW
    Intenta paginar. Ajusta los selectores cuando veas el DOM real del paginador.
    linkNext)namebuttonza:has-text('Next')zbutton:has-text('Next')z[aria-label='Next']z).afDataTable__paginate a:has-text('Next')r   i  r   r.   TF)get_by_roler'   r/   r0   r1   r4   r5   )r#   r6   cr   r   r   _click_nextU   s$   




r?   Nr,   T@  Frun_dirPath | None	max_pagesr   click_profile
timeout_msscreenshot_on_failc           
      C  s4  |  }t|  t| | | d t|D ]~}t|  | d }tddd |d d D  t| |}	|rMt	| |d|d   t
d|d  |  |	 dkrr|rg|	jd	jj|d
 | jd|d
 td|d |d  S |	 dkrtd| t| s n|r|rt	| |d t
d|  qtddS )Ni  ztbody tr tdzDEBUG TD texts sample:c                 S  s   g | ]}|  qS r   )r   ).0tr   r   r   
<listcomp>   s    z.users_select_user_by_email.<locals>.<listcomp>P   zusers-find-email-page-   za[href*="thisUser=1"]r   networkidleT)r   r   r   zMultiple rows matched email: zusers-find-email-not-foundF)r   )r   r$   r8   r4   ranger'   all_inner_textsprintr+   r   r   r0   r/   r1   wait_for_load_stater	   RuntimeErrorr?   )
r#   r%   rA   rC   rD   rE   rF   iemailsrowr   r   r   users_select_user_by_emailm   s4   





rU   )r   r   r   r   )r#   r   r%   r   )r#   r   r%   r   r   r
   )r#   r   r   r
   )Nr,   Tr@   F)r#   r   r%   r   rA   rB   rC   r   rD   r
   rE   r   rF   r
   r   r	   )
__future__r   dataclassesr   pathlibr   playwright.sync_apir   core.artifactsr   core.logr   r	   r   r$   r+   r8   r?   rU   r   r   r   r   <module>   s&   


	
