
    +i                         d Z ddlZddlZddlmZ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 dd	lmZ dd
lmZ  G d d          ZdS )zZ
NYTimes Search - High-level Operation

This module searches for articles on nytimes.com.
    N)DictAny)ManagedPage)ClickElement)PressTab)TypeText)	PasteText)
PressEnter)
ScrollPagec                   H    e Zd ZdZddedefdZdeded	eee	f         fd
Z
dS )NYTimesSearcha  
    Search for articles on nytimes.com.

    State Management:
        This operation does NOT handle page state management.
        The caller (typically BrowserNavigator) is responsible for:
        - Setting page to BUSY before calling
        - Setting page to IDLE/ERROR after completion

    Usage:
        searcher = NYTimesSearch(direct_access_probability=0.5)
        result = await searcher.search(managed_page, query)
          ?皙?direct_access_probabilitypaste_probabilityc                 2   t                      | _        t                      | _        t	                      | _        t                      | _        t                      | _	        t                      | _        || _        || _        t          d| d| d           dS )a  
        Initialize the NYTimes searcher with primitive operations.
        
        Args:
            direct_access_probability (float): Probability (0.0-1.0) of directly navigating to nytimes.com search URL
                                              instead of using search form (default: 0.5 = 50% chance)
            paste_probability (float): Probability (0.0-1.0) of pasting vs typing the search query (default: 0.9)
        u3   🔍 NYTimesSearch initialized (direct_access_prob=z, paste_prob=)N)r   clickerr   typerr	   pasterr
   presserr   scrollerr   tabberr   r   print)selfr   r   s      A/home/byschii/byschiidev/penelope/lib/highlevel/nytimes_search.py__init__zNYTimesSearch.__init__$   s     $~~ZZ
kk!||"jj)B&!2  AD]  A  Al}  A  A  A  	B  	B  	B  	B  	B    managed_pagequeryreturnc                 L  K   t          d|            |j        }	 d|                                v }|r<t          j                    | j        k     rt          d| j         d           |                    d          r|nd| }t          d|            |                    |d	           d
{V  t          d           t          j        t          j	        dd                     d
{V  t          d           | j
                            |dd           d
{V  t          d           | j
                            |dd           d
{V  t          d           dd||j        ddS t          d           |                    dd	           d
{V  t          d           t          j        t          j	        dd                     d
{V  t          d           d}d }d!}|                    |           d
{V }	|                    |           d
{V }
|	d
uo|	                                 d
{V }|
d
uo|
                                 d
{V }|rt          d"           | j                            ||           d
{V  d}t          j        t          j	        d#d$                     d
{V  | j                            |           d
{V  t          j        t          j	        d#d%                     d
{V  | j                            |d&           d
{V  t          j        t          j	        d#d'                     d
{V  nN| j                            ||           d
{V  t          j        t          j	        d(d$                     d
{V  t          d)           t          j                    | j        k     r"| j                            ||           d
{V  n!| j                            ||           d
{V  t          d*           | j                            |           d
{V  t          j        t          j	        d#d+                     d
{V  t          d,           | j
                            |d-d-           d
{V  t          j        t          j	        d#d+                     d
{V  | j                            |d.           d
{V  t          j        t          j	        d#d+                     d
{V  | j
                            |d-d-           d
{V  t          j        t          j	        d#d+                     d
{V  dd/||j        d0d1S # t2          $ r}t          d2|             d
}~ww xY w)3a  
        Search for articles on nytimes.com.

        Args:
            managed_page (ManagedPage): Managed page to use (caller handles state)
            query (str): Search query string or nytimes.com URL

        Returns:
            Dict containing search results and page information
            
        Note:
            Caller must handle page state management (set_busy/set_idle/set_error).
        u   🔍 Searching NYTimes for: znytimes.comu,   🎯 Direct navigation to NYTimes URL (prob=r   httpzhttps://u   🌐 Navigating to: domcontentloaded)
wait_untilNu   ✅ Page loaded      u!   ⏳ Waited for page stabilizationi     )distanceslowmou   📜 Scrolled downi  u   📜 Scrolled down againTdirect_navigationz2Successfully navigated to NYTimes URL and scrolled)successmethodurlpage_urlmessageu   🔎 Using search form approachzhttps://www.nytimes.com/u   ✅ NYTimes homepage loadedg333333?gffffff?u   🔘 Clicking search buttonFz$button:has(svg > rect[x="1"][y="3"])z=[data-testid="search-button"]:has(svg > path[d^="M11.3,9.2"])u4   📱 Detected mobile layout, clicking hamburger menug?   r   )
with_shiftg333333?r   u   ⌨️ Entering search queryu   ↵ Pressing enterg?u   📜 Scrolling to see resultsd   zmain h4search_formz/Successfully performed search using search form)r,   r-   r    r/   r0   u   ❌ NYTimes search failed: )r   pagelowerrandomr   
startswithgotoasynciosleepuniformr   scrollr.   query_selector
is_visibler   click_selectorr   pressr   r   paster   typer   	Exception)r   r   r    r5   is_nytimes_urlr.   is_page_squeezedhamburger_selectorlens_selector	hamburgerlenshamburger_presentlens_presentes                 r   searchzNYTimesSearch.search7   s      	4U44555 d	*ekkmm;N  [&-//D4R"R"RfTEcfffggg  %//77Oee=O=O=O2S22333ii0BiCCCCCCCCC())) mFN1a$8$8999999999:;;; m**4$s*KKKKKKKKK+,,, m**4#c*JJJJJJJJJ1222  $1 $S   8999ii :GYiZZZZZZZZZ4555mFN3$<$<========= 4555#( %K" _"&"5"56H"I"IIIIIII	!00????????$-T$9$[YEYEYE[E[>[>[>[>[>[>[!#4/K$//:K:K4K4K4K4K4K4K$ @QRRR,55lDVWWWWWWWWW'+$!-sA(>(>?????????+++D111111111!-sC(@(@AAAAAAAAA+++DT+BBBBBBBBB!-sC(@(@AAAAAAAAAA ,55lMRRRRRRRRR!-sA(>(>????????? 5666=??T%;;;+++D%8888888888*//$666666666 +,,,l((.........mFN3$<$<========= 6777m**4#c*JJJJJJJJJmFN3$<$<=========l11,	JJJJJJJJJmFN3$<$<=========m**4#c*JJJJJJJJJmFN3$<$<=========  $+" $P    	 	 	333444	s   EV 2PV 
V#VV#N)r   r   )__name__
__module____qualname____doc__floatr   r   strr   r   rN    r   r   r   r      s         B B% BRW B B B B&u uS uT#s(^ u u u u u ur   r   )rR   r:   r7   typingr   r   lib.page_managementr   lib.primitive.click_elementr   lib.primitive.press_tabr   lib.primitive.type_textr   lib.primitive.paste_textr	   lib.primitive.press_enterr
   lib.primitive.scroll_pager   r   rU   r   r   <module>r^      s               + + + + + + 4 4 4 4 4 4 , , , , , , , , , , , , . . . . . . 0 0 0 0 0 0 0 0 0 0 0 0W W W W W W W W W Wr   