Ë
    ±bjY  ã            
       ó�   — d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ eddddd	d
dddf
Zdedefd„Zdefd„Zdedefd„Zy)é    )ÚPage)Úhuman_delayÚ
safe_click)ÚCONFIRM_EXCHANGE_TYPEÚCONFIRM_TEAM_BLOCKÚCONFIRM_PLAYLISTSÚCONFIRM_STATSÚCONFIRM_MESSAGEÚCONFIRM_SEND_BUTTON)Ú_dismiss_activation_guidez#sendExchangezbutton#sendExchangezbutton[id*='send' i]zbutton[id*='Send' i]zfooter button:has-text('Send')z"button:has-text('Send your video')zbutton:has-text('Send')z".uni-btn--primary:has-text('Send')z>xpath=//button[contains(translate(., 'SEND', 'send'), 'send')]ÚpageÚreturnc           
   ƒ   óZ
  K  — t        | «      ƒ d{  –—†  t        dd«      ƒ d{  –—†  	 | j                  dd¬«      ƒ d{  –—†  d}| j	                  t
        «      j                  }|j                  «       ƒ d{  –—† dkD  re|j                  «       ƒ d{  –—† }d	j                  |j                  d
«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% c}«      }|s 	 | j                  d«      ƒ d{  –—† }|xs d}d}d}| j	                  t        «      j                  }|j                  «       ƒ d{  –—† dkD  rè|j	                  d«      j                  }	|	j                  «       ƒ d{  –—† dkD  r&|	j                  «       ƒ d{  –—† j                  «       }|j	                  d«      j                  }
|
j                  «       ƒ d{  –—† dkD  rV|
j                  d«      ƒ d{  –—† xs d}d|v r5|j                  d«      d   j                  d«      d   j                  d«      }|s	 | j                  d«      ƒ d{  –—† }g }| j	                  t        «      }t!        |j                  «       ƒ d{  –—† «      D ]K  }|j#                  |«      j                  «       ƒ d{  –—† j                  «       }|sŒ;|j%                  |«       ŒM g }| j	                  t&        «      j                  }|j                  «       ƒ d{  –—† dkD  �r |j	                  d«      }|j                  «       ƒ d{  –—† }|dkD  rZt!        |«      D ]K  }|j#                  |«      j                  «       ƒ d{  –—† j                  «       }|sŒ;|j%                  |«       ŒM nx|j                  «       ƒ d{  –—† }d	j                  |j                  d
«      D �cg c]#  }|j                  «       sŒ|j                  «       ‘Œ% c}«      }|r|j%                  |«       d}| j	                  t(        «      j                  }|j                  «       ƒ d{  –—† dkD  r&|j                  «       ƒ d{  –—† j                  «       }|s	 | j                  d«      ƒ d{  –—† }dd| j*                  ||||||dœ	S 7 �Œ‘7 �Œ€7 �Œg# t        $ r Y �Œqw xY w7 �ŒA7 �Œ)c c}w 7 �ŒÈ# t        $ r Y �ŒÌw xY w7 �Œš7 �Œg7 �ŒO7 �Œ7 �Œø7 �Œ¢# t        $ r d}Y �Œ®w xY w7 �Œƒ7 �ŒX7 �Œþ7 �ŒÔ7 �Œ�7 �Œcc c}w 7 ŒÑ7 Œ¸7 Œ�# t        $ r d}Y Œ›w xY w­w)uö   
    GET /exchange/confirm
    Reads the final confirmation screen details before submitting.

    Do NOT call close_hudl_popups() â€” Confirm Your Exchange is a Hudl Modal;
    closing it removes #sendExchange and breaks Request Video Send.
    Ngš™™™™™é?gffffffö?aW  () => {
              const t = document.body?.innerText || '';
              if (/confirm your exchange/i.test(t)) return true;
              if (document.querySelector('#sendExchange')) return true;
              if (/request exchange with|exchange with/i.test(t) && /message/i.test(t)) return true;
              return false;
            }ià.  )ÚtimeoutÚ r   Ú Ú
zá() => {
                  const t = document.body?.innerText || '';
                  const m = t.match(/((?:Request |Two-way |One-way )?Exchange with[^
]*)/i);
                  return m ? m[1].trim() : '';
                }Úh5z.ex-team-photoÚstylezurl(é   Ú)z'"zí() => {
                  const h = document.querySelector(
                    '.ex-team-block h5, [class*="confirm"] h5, .smooth-modal h5, h5'
                  );
                  return (h?.innerText || '').trim();
                }Úliaµ  () => {
                  const label = [...document.querySelectorAll('h3,h4,p,span,div')]
                    .find(el => /^(message)$/i.test((el.innerText || '').trim()));
                  if (!label) return '';
                  let n = label.nextElementSibling;
                  while (n && !(n.innerText || '').trim()) n = n.nextElementSibling;
                  return (n?.innerText || '').trim().slice(0, 500);
                }ÚokÚconfirm_details)	ÚstatusÚactionÚurlÚexchange_nameÚschool_nameÚschool_imageÚvideo_namesÚstatsÚmessage)r   r   Úwait_for_functionÚ	ExceptionÚlocatorr   ÚfirstÚcountÚ
inner_textÚjoinÚsplitÚstripÚevaluater   Úget_attributer   ÚrangeÚnthÚappendr	   r
   r   )r   r   Úexchange_type_locatorÚtextÚtÚheadingr   r    Ú
team_blockÚ
h5_locatorÚphoto_locatorr   r!   Úplaylists_locatorÚir"   Ústats_locatorÚ
li_locatorr(   Úcleanedr#   Úmsg_locators                         úC/var/www/html/sergio/sergio-backend/app/automation/tasks/confirm.pyÚget_confirm_detailsr@      s²  è ø€ ô $ DÓ
)×)Ð)Ü
�c˜3Ó
×ÐðØ×$Ñ$ðð ð %ó 	
÷ 		
ð 		
ð €MØ ŸL™LÔ)>Ó?×EÑEÐØ"×(Ñ(Ó*×*¨QÒ.Ø*×5Ñ5Ó7×7ˆØŸ™°T·Z±ZÀÔ5EÓ!SÑ5E°ÈÏÉÍ !§'¡'¥)Ð5EÑ!SÓTˆÙð
	Ø ŸM™Mðó÷ ˆGð $šM rˆMð €KØ€LØ—‘Ô0Ó1×7Ñ7€JØ×ÑÓ× !Ò#Ø×'Ñ'¨Ó-×3Ñ3ˆ
Ø×!Ñ!Ó#×# aÒ'Ø!+×!6Ñ!6Ó!8×8×?Ñ?ÓAˆKà"×*Ñ*Ð+;Ó<×BÑBˆØ×$Ñ$Ó&×&¨Ò*Ø'×5Ñ5°gÓ>×>ÒDÀ"ˆEØ˜‰Ø$Ÿ{™{¨6Ó2°1Ñ5×;Ñ;¸CÓ@ÀÑC×IÑIÈ%ÓP�áð
	Ø $§¡ðó!÷ ˆKð €KØŸ™Ô%6Ó7ÐÜÐ*×0Ñ0Ó2×2Ö3ˆØ'×+Ñ+¨AÓ.×9Ñ9Ó;×;×BÑBÓDˆÚØ×Ñ˜tÕ$ð 4ð
 €EØ—L‘L¤Ó/×5Ñ5€MØ× Ñ Ó"×" QÓ&Ø"×*Ñ*¨4Ó0ˆ
Ø ×&Ñ&Ó(×(ˆØ�1Š9Ü˜5–\�Ø(Ÿn™n¨QÓ/×:Ñ:Ó<×<×CÑCÓE�ÚØ—L‘L Õ&ñ "ð
 '×1Ñ1Ó3×3ˆDØ—h‘h°4·:±:¸dÔ3CÓQÑ3C¨aÀqÇwÁwÅy §¡¥	Ð3CÑQÓRˆGÙØ—‘˜WÔ%à€GØ—,‘,œÓ/×5Ñ5€KØ×ÑÓ ×  1Ò$Ø$×/Ñ/Ó1×1×8Ñ8Ó:ˆÙð	Ø ŸM™Mðó	÷ 	ˆGð Ø#Ø�x‰xØ&Ø"Ø$Ø"ØØñ
ð 
ðU *ùØùð		
úô ò Úðúð
 +ùØ7ûÚ!Sðúô ò 	Úð	úð  ùà#ùØ8ùð 'ùØ>ùðúô ò 	Ø‹Kð	úð
 3ùØ;ùð #ùà(ùð =ùð 4ûÚQð !øØ1øð	ùô ò 	ØŠGð	üs,  ‚T+‘R"’T+¥R%¦T+«R+ ÁR(ÁR+ Á4T+Á:R;Á;T+ÂR>Â"T+Â8SÃSÃ 	T+Ã*S	 Ã>SÃ?
S	 Ä	6T+Ä?SÅ 5T+Å5SÅ6T+ÆSÆA T+ÇS"ÇT+Ç-S%Ç.AT+È2S+ ÉS(ÉS+ É/T+É:S=É;-T+Ê(T Ê)T+Ê>AT+ÌTÌ,T+Ì2TÌ39T+Í,T	Í-T+Î'T+Î)TÎ*"T+ÏTÏ"TÏ4AT+ÑTÑT+ÑTÑT+Ñ3T ÒTÒT ÒT+Ò%T+Ò(R+ Ò+	R8Ò4T+Ò7R8Ò8T+Ò>T+ÓT+ÓS	 Ó		SÓT+ÓSÓT+ÓT+ÓT+Ó"T+Ó%T+Ó(S+ Ó+S:Ó6T+Ó9S:Ó:T+Ô T+ÔT+ÔT+Ô	T+ÔT+ÔT+ÔT+ÔT ÔT(Ô%T+Ô'T(Ô(T+c              ƒ   óô   K  — t         D ]X  }| j                  |«      j                  }	 |j                  «       ƒ d {  –—† dk(  rŒ;|j	                  «       ƒ d {  –—† r||fc S ŒZ y7 Œ)7 Œ# t
        $ r Y Œkw xY w­w)Nr   )NN)Ú_SEND_BUTTON_SELECTORSr&   r'   r(   Ú
is_visibler%   )r   ÚselÚlocs      r?   Ú_find_send_buttonrF   œ   sz   è ø€ ß%ˆØ�l‰l˜3Ó×%Ñ%ˆð	Ø—Y‘Y“[×  AÒ%ØØ—^‘^Ó%×%Ð%Ø˜C�x’ð &ð &ð ð !øà%ùäò 	Ùð	üsV   ‚%A8¨A)»A%¼A)ÁA8ÁA)ÁA'ÁA)ÁA8Á%A)Á'A)Á)	A5Á2A8Á4A5Á5A8c              ƒ   ó   K  — t        | «      ƒ d{  –—†  t        dd«      ƒ d{  –—†  d}d}t        d«      D ]C  }t        | «      ƒ d{  –—† \  }}|� n)t        dd«      ƒ d{  –—†  t        | «      ƒ d{  –—†  ŒE |€3	 | j	                  d«      ƒ d{  –—† }t        d|› �«       t        d«      ‚t        d	|› �«       	 t        |d
d¬«      ƒ d{  –—†  t        dd«      ƒ d{  –—†  t        | «      ƒ d{  –—†  dd| j                  |ddœS 7 �Œ7 Œï7 ŒÌ7 Œ³7 Œ¢7 Œ†# t        $ r Y t        d«      ‚w xY w7 Œc# t        $ rD |j                  «       ƒ d{  –—†7  }|€t        d«      ‚| j	                  d|«      ƒ d{  –—†7   Y Œ­w xY w7 Œ¡7 Œ�­w)u½   
    POST /exchange/confirm
    Clicks Send on Confirm Your Exchange (Two-way / One-way / Request Video).

    Never call close_hudl_popups() â€” that dismisses the confirm Hudl Modal.
    Ng333333ã?g      ð?é   gš™™™™™Ù?ab  () => ({
                  url: location.href,
                  hasConfirm: /confirm your exchange/i.test(document.body?.innerText || ''),
                  buttons: [...document.querySelectorAll('button')]
                    .slice(0, 20)
                    .map(b => ({ id: b.id, text: (b.innerText || '').trim().slice(0, 40) })),
                })u+   submit_exchange: Send button not found â€” z}Could not find Hudl Send button on Confirm Your Exchange. Make sure the message step completed and the confirm modal is open.z#submit_exchange: clicking Send via i@  iÄ	  )Ú
timeout_msÚforce_after_mszHudl Send button handle missingz?(el) => { el.scrollIntoView({ block: 'center' }); el.click(); }g       @g      @r   Úexchange_submittedz)Exchange has been successfully submitted.)r   r   r   Úsend_buttonr#   )r   r   r/   rF   r-   Úprintr%   ÚRuntimeErrorr   Úelement_handler   )r   Ú
submit_btnÚusedÚ_ÚhintÚhandles         r?   Úsubmit_exchangerU   ©   sÑ  è ø€ ô $ DÓ
)×)Ð)Ü
�c˜3Ó
×Ðà€JØ€Dä�2ŽYˆÜ!2°4Ó!8×8Ñˆ
�DØÐ!ÙÜ˜#˜sÓ#×#Ð#Ü'¨Ó-×-Ñ-ð ð Ðð	ØŸ™ðó÷ ˆDô Ð?À¸vÐFÔGô ðRó
ð 	
ô
 
Ð/°¨vÐ
6Ô7ð

Ü˜°ÀTÔJ×JÐJô �c˜3Ó
×ÐÜ
# DÓ
)×)Ð)ð Ø&Ø�x‰xØØ>ñð ðc *ùØøð 9øð 	$øØ-øð
ùô ò 	ØÜðRó
ð 	
ð	úð 	KùÜò 
à!×0Ñ0Ó2×2Ð2ˆØˆ>ÜÐ@ÓAÐAØ�m‰mØMØó
÷ 	
ó 	
ð
úð  øØ)ús÷   ‚F‘D’F¥D¦$FÁ
DÁFÁ%DÁ&FÁ8DÁ9FÂD ÂDÂD Â)FÃD: ÃD8ÃD: ÃFÃ(F
Ã)FÃ;FÃ<FÄFÄFÄFÄFÄD Ä	D5Ä(FÄ4D5Ä5FÄ8D: Ä:FÅEÅ'FÅ>FÅ?FÆFÆFÆFÆFN)Úplaywright.async_apir   Úapp.automation.helpersr   r   Úapp.automation.selectorsr   r   r   r	   r
   r   Úapp.automation.tasks.popupr   rB   Údictr@   rF   rU   © ó    r?   Ú<module>r]      sy   ðÝ %ç :÷÷ õ Að ØØØØØ$Ø(ØØ(ØDðÐ ð| Dð |¨Tó |ð~
 $ó 
ð> ð >¨ô >r\   