
    Poiy                     L    d Z ddlZddlZddlmZmZmZ ddlmZ ddl	m
Z
 d ZdS )z~
Ops Router - Page management operations

This router handles page management operations like create, destroy, navigate, etc.
    N)	Blueprintjsonifyrequest)	PageState)require_api_keyc                 r   | dz   }|                     |dz   dg          t          fd                        }|                     |dz   ddg          t          fd                        }|                     |d	z   dg          t          fd
                        }|                     |dz   dg          t          fd                        }|                    |dz             t          fd                        }|                     |dz   dg          t          fd                        }	dS )z
    Register ops routes with the app.

    Args:
        app: Quart app instance
        browser_navigator_getter: Function that returns the browser_navigator instance
    z/opsz/create-pagePOST)methodsc                    K   	              } | st          ddi          dfS t          j                     d{V pi }|                    d          }|                     |           d{V }d|v rt          |          dfS t          |          S # t
          $ r*}t          dt          |          i          dfcY d}~S d}~ww xY w)a  
        Create a new page/tab in the browser.

        Opens a new browser tab and returns page metadata with auto-generated or custom ID.

        Body parameters:
        - page_id: Custom page identifier (optional, auto-generated if not provided)
        error!Browser navigator not initialized  Npage_id  )r   r   get_jsongetcreate_page	Exceptionstr)browser_navigatordatar   resultebrowser_navigator_getters        0/home/byschii/byschiidev/penelope/routers/ops.pyops_create_pagez,register_ops_routes.<locals>.ops_create_page   s     	3 8 8 : :$ T)LMNNPSSS )++++++++1rDhhy))G,88AAAAAAAAF&  v++6??" 	3 	3 	3GSVV,--s2222222	3s)   B AB B 
CC<CCz/<page_id>/destroy-pageDELETEc                 4  K   	              }|st          ddi          dfS |                    |            d{V }d|v rt          |          dfS t          |          S # t          $ r*}t          dt          |          i          dfcY d}~S d}~ww xY w)z
        Destroy/close a page/tab in the browser.

        Closes the specified page tab and cleans up associated resources.

        URL parameters:
        - page_id: ID of the page to destroy
        r   r   r   Nr   )r   destroy_pager   r   r   r   r   r   r   s       r   ops_destroy_pagez-register_ops_routes.<locals>.ops_destroy_page7   s      	3 8 8 : :$ T)LMNNPSSS,99'BBBBBBBBF&  v++6??" 	3 	3 	3GSVV,--s2222222	3s(   A# /A# A# #
B-BBBz/<page_id>/navigatec                 @  K   dt          t          j                    dz            dz   }	              }|st          d| d          dfS t          j        d           d{V  t          j                     d{V }|                    d	          }|st          d
| d          dfS t          d| d| d|             	 t          j	        |
                    ||           d           d{V }t          d| d           t          |          S # t          j        $ r* t          d| d           t          d| d          dfcY S w xY w# t          $ r@}t          d| d|            t          t          |          | d          dfcY d}~S d}~ww xY w)a\  
        Navigate to a URL in the specified page.

        Loads a URL in the page with automatic waiting for navigation to complete.
        Includes timeout protection to prevent indefinite hangs.

        URL parameters:
        - page_id: ID of the page to navigate in

        Body parameters:
        - url: Target URL to navigate to
        api_i  i'  r   r   r   r      NurlzURL requiredr   u   ➡️ [z] API navigate request: z using page_id=g      N@)timeoutu   ✅ [z%] API navigate completed successfullyu   ⚠️ [z)] API navigate timed out after 60 secondszNavigation request timed outi  u   ❌ [z] API navigate error: )inttimer   asynciosleepr   r   r   printwait_fornavigateTimeoutErrorr   r   )r   
request_idr   r   r&   r   r   r   s          r   ops_navigatez)register_ops_routes.<locals>.ops_navigateP   sT      >C	d 233e;==
	G 8 8 : :$ h)LY`aabbdggg-""""""""" )++++++++D((5//C SGLLMMsRR^Z^^^^U\^^___	c&/%..sG<<             OjOOOPPPv&' c c cVVVVWWW)GT[\\]]_bbbbbc  	G 	G 	G?*??A??@@@SVV@@AA3FFFFFFF	GsI   E AE ,E AD 6EE EE 
F5FFFz/<page_id>/extract-contentc                   K   	              }|st          d| d          dfS |                    |            d{V }t          |          S # t          $ r+}t          t          |          | d          dfcY d}~S d}~ww xY w)z
        Extract full HTML content from the current page.

        Retrieves the complete DOM as HTML string for parsing and analysis.

        URL parameters:
        - page_id: ID of the page to extract content from
        r   r$   r   N)r   extract_contentr   r   r    s       r   ops_extract_contentz0register_ops_routes.<locals>.ops_extract_content   s      	G 8 8 : :$ h)LY`aabbdggg,<<WEEEEEEEEF6??" 	G 	G 	GSVV@@AA3FFFFFFF	G"   A )A 
B A?9B?Bz/<page_id>/screenshotc                   K   	              }|st          d| d          dfS |                    |            d{V }t          |          S # t          $ r+}t          t          |          | d          dfcY d}~S d}~ww xY w)z
        Take a screenshot of the current page.

        Captures visual state of the page as an image file.

        URL parameters:
        - page_id: ID of the page to screenshot
        r   r$   r   N)r   
screenshotr   r   r    s       r   ops_screenshotz+register_ops_routes.<locals>.ops_screenshot   s      	G 8 8 : :$ h)LY`aabbdggg,77@@@@@@@@F6??" 	G 	G 	GSVV@@AA3FFFFFFF	Gr5   z/<page_id>/search-objectc                   K   	              }|st          d| d          dfS t          j                     d{V pi }|                    d          }|st          d| d          dfS |                    ||            d{V }t          |          S # t
          $ r+}t          t          |          | d          dfcY d}~S d}~ww xY w)a[  
        Search for an object on the page based on description using vision AI.

        Uses Gemini vision API to detect and locate objects matching the description.

        URL parameters:
        - page_id: ID of the page to search in

        Body parameters:
        - description: Description of the object to search for (required)
        r   r$   r   Ndescriptionz+Object description required in request bodyr   )r   r   r   r   do_search_objectr   r   )r   r   r   r:   r   r   r   s         r   ops_search_objectz.register_ops_routes.<locals>.ops_search_object   s&     	G 8 8 : :$ h)LY`aabbdggg )++++++++1rD((=11K r)Vcjkkllnqqq,==k7SSSSSSSSF6??" 	G 	G 	GSVV@@AA3FFFFFFF	Gs)   B AB +*B 
C  C CCN)router   r   )
url_api_verisonappr   opsr   r!   r1   r4   r8   r<   s
     `       r   register_ops_routesrA      s    F
"CYYn$vhY773 3 3 3 _ 8734 	YYs..8JYKK3 3 3 3 _ LK3. 	YYs**VHY==+G +G +G +G _ >=+GZ 	YYs11F8YDDG G G G _ EDG& 	WWS**++G G G G _ ,+G& 	YYs//&YBBG G G G _ CBG G G    )__doc__r*   r)   quartr   r   r   lib.page_managementr   lib.authr   rA    rB   r   <module>rH      s       - - - - - - - - - - ) ) ) ) ) ) $ $ $ $ $ $uG uG uG uG uGrB   