
    =iiV                         d Z ddlZddlmZmZmZmZ ddlmZm	Z	  ej                  d      Ze G d d             Z G d d	      Zy)
zk
Genesis V2 Extension Background
===============================
Service worker / background script logic.
    N)DictAnyCallableOptional)	dataclassfieldzgenesis_v2.extension.backgroundc                   D    e Zd ZU dZeed<   eeef   ed<   dZe	e   ed<   y)Messagez Chrome extension message format.typepayloadN	sender_id)
__name__
__module____qualname____doc__str__annotations__r   r   r   r        8/mnt/e/genesis-system/genesis_v2/extension/background.pyr
   r
      s&    *
I#s(^#Ix}#r   r
   c                       e Zd ZdZddefdZd ZdedefdZ	dedefdZ
dedefd	Zd
edefdZdedefdZd ZddededefdZdeeef   fdZy)BackgroundServicez
    Background service worker logic for Chrome extension.
    
    Handles:
    - Message routing between content scripts and backend
    - WebSocket connection to local Genesis server
    - Tab management and state tracking
    
server_urlc                 \    || _         d| _        i | _        i | _        | j	                          y )NF)r   	connected	_handlers_active_tabs_register_default_handlers)selfr   s     r   __init__zBackgroundService.__init__    s-    $.0-/ 	'')r   c                     | j                   | j                  d<   | j                  | j                  d<   | j                  | j                  d<   d | j                  d<   y)z"Register default message handlers.analyze_pagecapture_screenexecute_actionc                     di dS )Npongr   r   r   )ms    r   <lambda>z>BackgroundService._register_default_handlers.<locals>.<lambda>.   s    Fr+J r   pingN)_handle_analyzer   _handle_capture_handle_actionr   s    r   r   z,BackgroundService._register_default_handlers)   sN    )-)=)=~&+/+?+?'(+/+>+>'(!Jvr   messagereturnc                 T    t         j                  d|j                          dddidS )zHandle page analysis request.zBackground: analyze_page from analyze_resultstubTr'   loggerinfor   r   r/   s     r   r+   z!BackgroundService._handle_analyze0   s,    4W5F5F4GHI(fd^DDr   c                 T    t         j                  d|j                          dddidS )zHandle screen capture request.z Background: capture_screen from capture_resultr3   Tr'   r4   r7   s     r   r,   z!BackgroundService._handle_capture5   s,    6w7H7H6IJK(fd^DDr   c                 V    t         j                  d|j                          dddddS )z Handle action execution request.z Background: execute_action from action_resultT)r3   successr'   r4   r7   s     r   r-   z BackgroundService._handle_action:   s-    6w7H7H6IJK'Td4STTr   message_typehandlerc                 "    || j                   |<   y)zRegister a message handler.N)r   )r   r=   r>   s      r   
on_messagezBackgroundService.on_message?   s    '.|$r   c                 F   t        |j                  dd      |j                  di       |j                  d            }| j                  j                  |j                        }|r ||      S t        j                  d|j                          ddd	|j                   id
S )z
        Route incoming message to appropriate handler.
        
        This is called by the Chrome extension's message listener.
        r   unknownr   r   )r   r   r   zUnknown message type: errorr/   zUnknown type: r'   )r
   getr   r   r5   warning)r   r/   msgr>   s       r   handle_messagez BackgroundService.handle_messageC   s     VY/KK	2.kk+.
 ..$$SXX.3</z:;Y.
8S,TUUr   c                 ^   K   t         j                  d| j                          d| _        yw)z
        Connect to local Genesis WebSocket server.
        
        Stub implementation - would use websockets library.
        z[STUB] Connecting to T)r5   r6   r   r   r.   s    r   connect_to_serverz#BackgroundService.connect_to_serverV   s+      	+DOO+<=>s   +-tab_idurltitlec                 (    ||d| j                   |<   y)zTrack active tab state.)rK   rL   N)r   )r   rJ   rK   rL   s       r   	track_tabzBackgroundService.track_tab`   s    ,/%$@&!r   c                 6    | j                   j                         S )zGet all tracked tabs.)r   copyr.   s    r   get_active_tabsz!BackgroundService.get_active_tabsd   s      %%''r   N)zws://localhost:8765) )r   r   r   r   r   r    r   r
   r   r+   r,   r-   r   r@   rG   rI   intrN   rQ   r   r   r   r   r      s    *3 *KEw E4 E
Ew E4 E
Ug U$ U
/s /X /Vd Vt V&A A# Ac A(c4i (r   r   )r   loggingtypingr   r   r   r   dataclassesr   r   	getLoggerr5   r
   r   r   r   r   <module>rX      sP     0 0 (			<	= $ $ $P( P(r   