
    >i                        d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	 erd dlm
Z
mZ d dlmZ d dlmZ  ej                   e      Z G d d	      Zy)
    )annotationsN)TYPE_CHECKINGcast)JavascriptDialogOpeningEvent"JavascriptDialogOpeningEventParams)AnyCallable)CDPEvent)RequestWillBeSentEventc                  X    e Zd ZdZd
dZ	 d	 	 	 	 	 	 	 ddZddZd ZddZddZ	ddZ
y	)EventsManagerz
    Manages event callbacks, processing, and network logs.

    Handles event callback registration, triggering, and maintains state
    for network logs and dialog information.
    c                    i | _         d| _        g | _        t               | _        t
        j                  d       t
        j                  d       y)z+Initialize events manager with empty state.r   zEventsManager initializedz0Initial state: callbacks=0, logs=0, dialog=emptyN)_event_callbacks_callback_idnetwork_logsr   dialogloggerinfodebugselfs    o/var/www/python/tenders/Scrapper/venv/lib/python3.12/site-packages/pydoll/connection/managers/events_manager.py__init__zEventsManager.__init__   s>    13:<24/0GH    c                $   | xj                   dz  c_         |||d| j                  | j                   <   t        j                  d| d| j                           t        j	                  d| dt        | j                                | j                   S )a9  
        Register callback for specific event type.

        Args:
            event_name: Event name to listen for.
            callback: Function called when event occurs.
            temporary: If True, callback removed after first trigger.

        Returns:
            Callback ID for later removal.
           )eventcallback	temporaryzRegistered callback 'z
' with ID zCallback details: temporary=z, total_callbacks=)r   r   r   r   r   len)r   
event_namer   r   s       r   register_callbackzEventsManager.register_callback&   s     	Q "4
d//0
 	+J<z$BSBSATUV*9+5GDLaLaHbGcd	
    r   c                    || j                   vrt        j                  d| d       y| j                   |= t        j                  d|        t        j	                  dt        | j                                 y)zRemove callback by ID.zCallback ID z
 not foundFzRemoved callback ID zRemaining callbacks: T)r   r   warningr   r   r    )r   callback_ids     r   remove_callbackzEventsManager.remove_callback@   sm    d333NN\+jAB!!+.*;-89,S1F1F-G,HIJr   c                    | j                   j                          t        j                  d       t        j	                  d       y)z Remove all registered callbacks.zAll callbacks clearedzCallbacks store is now emptyN)r   clearr   r   r   r   s    r   clear_callbackszEventsManager.clear_callbacksK   s.    ##%+,34r   c                "  K   |d   }t         j                  d|        d|v r| j                  |       d|v r&t        |d   t	        t
        |d               | _        d|v rt               | _        | j                  ||       d{    y7 w)	z
        Process received event and trigger callbacks.

        Handles special events (network requests, dialogs) and updates
        internal state before triggering registered callbacks.
        methodzProcessing event: zNetwork.requestWillBeSentzPage.javascriptDialogOpeningparams)r+   r,   zPage.javascriptDialogClosedN)r   r   _update_network_logsr   r   r   r   _trigger_callbacks)r   
event_datar!   s      r   process_eventzEventsManager.process_eventQ   s       )
)*67&*4%%j1)Z76!(+>
8@TUDK
 )J668DK%%j*===s   BBBBc                b    | j                   j                  |       | j                   dd | _         y)z5Add network event to logs (keeps last 10000 entries).iN)r   append)r   r/   s     r   r-   z"EventsManager._update_network_logsi   s+      , --fg6r   c           
       K   g }t        | j                  j                               D ]]  \  }}|d   |k(  s	 t        j                  |d         r |d   |       d{    n |d   |       |d   sM|j                  |       _ |D ]  }| j                  |        t        j                  d| d|        y7 ]# t
        $ r.}t        j                  d| dt        |              Y d}~d}~ww xY ww)	zDTrigger all registered callbacks for event, removing temporary ones.r   r   NzError in callback z: r   zTriggered callbacks for 'z'. Removed temporaries: )listr   itemsasyncioiscoroutinefunction	Exceptionr   errorstrr2   r&   r   )r   r!   r/   callbacks_to_removecb_idcb_dataes          r   r.   z EventsManager._trigger_callbacksn   s     "4#8#8#>#>#@A 	6NE7w:-I227:3FG1gj1*===+
+J7 ;''..u5	6 ) 	(E  '	('
|3KL_K`a	
 > ! ILL#5eWBs1vh!GHHIsG   4C8&B>B<B>/C85AC8<B>>	C5$C0+C80C55C8N)returnNone)F)r!   r:   r   zCallable[[dict], Any]r   boolr?   int)r%   rB   r?   rA   )r/   r
   )r/   r   )r!   r:   r/   r
   )__name__
__module____qualname____doc__r   r"   r&   r)   r0   r-   r.    r   r   r   r      sR    I SX!!)>!KO!	!4	5>07

r   r   )
__future__r   r6   loggingtypingr   r   pydoll.protocol.page.eventsr   r   r   r	   pydoll.protocol.baser
   pydoll.protocol.network.eventsr   	getLoggerrC   r   r   rG   r   r   <module>rO      sB    "   &
 $-E			8	$n
 n
r   