
    !+iE                        d Z ddlmZmZ ddl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  ej                  e      Zg Z e       Zdedefd	Zd
efdZ ej.                  ddg      d        Z ej.                  ddg      d        Zy)zD
Server-Sent Events (SSE) endpoint for real-time dashboard updates.
    )Responsestream_with_contextN)QueueEmpty)Lock)api_bp
event_typedatac                 d   | |t        j                          d}t        5  g }t        D ]  }	 |j                  |        |D ]  }t        j                  |        	 ddd       t        j                  d|  dt        t               d       y#  |j	                  |       Y {xY w# 1 sw Y   KxY w)zq
    Broadcast an event to all connected SSE clients.
    Called by WebhookProcessor when orders are synced.
    )typer
   	timestampNz[SSE] Broadcast: z to z clients)	time	_sse_lock_sse_queues
put_nowaitappendremoveloggerinfolen)r	   r
   
event_datadead_queuesqs        C/var/www/hypershopcomercio.com.br/hyper-ai/app/api/endpoints/sse.pybroadcast_eventr      s     YY[J 
 
" 	&A&Z(	&  	"Aq!	"
" KK#J<tC4D3EXNO&""1%
" 
"s!   B&BB&B#!B&&B/client_queuec              #   P  K   	 dt        j                  ddi       d 	 	 | j                  d      }|j                  dd      }t        j                  |j                  d	i             }d
| d| d V# t        $ r d Y w xY w# t        $ r t
        j                  d       Y nw xY w	 t        5  | t        v rt        j                  |        ddd       y# 1 sw Y   yxY w# t        5  | t        v rt        j                  |        ddd       w # 1 sw Y   w xY wxY ww)z!Generator that yields SSE events.zevent: connected
data: status	connectedz

   )timeoutr   updater
   zevent: z
data: z: heartbeat

z[SSE] Client disconnectedN)
jsondumpsgetr   GeneratorExitr   r   r   r   r   )r   eventr	   r   s       r   _generate_eventsr(   .   s    1(X{4K)L(MTRR)$(((4"YYvx8
!ZZ		&"(=>

|8J<tDD   )'()  1/010  	1{*""<0	1 	1 	1Y 	1{*""<0	1 	1 	1s   D&B AA8 7B 8BB BB B,)C) +B,,C) 0D&6C	D&C&"D&)D#0D	D#D D##D&z/sse/updatesGET)methodsc            	         t        d      } t        5  t        j                  |        ddd       t        j                  dt        t                      t        t        t        |             ddddd	d
      }|S # 1 sw Y   UxY w)z
    SSE endpoint for real-time updates.
    
    Events:
    - connected: Initial connection confirmation
    - order_update: New order synced
    - item_update: Item/Ad synced
    - sync_status: Sync job status change
    d   )maxsizeNz#[SSE] New client connected. Total: ztext/event-streamzno-cachez
keep-aliveno*)zCache-Control
ConnectionzX-Accel-BufferingzAccess-Control-Allow-Origin)mimetypeheaders)
r   r   r   r   r   r   r   r   r   r(   )r   responses     r   sse_updatesr4   K   s     %L	 )<() KK5c+6F5GHI,\:;$'&!%+.	
	H O!) )s   A==Bz/sse/statusc                  <    ddl m}   | dt        t              i      S )zGet SSE connection status.r   jsonifyconnected_clients)flaskr7   r   r   r6   s    r   
sse_statusr:   l   s#     S-      )__doc__r9   r   r   r#   r   loggingqueuer   r   	threadingr   app.apir   	getLogger__name__r   r   r   strdictr   r(   router4   r:    r;   r   <module>rG      s    0      			8	$ F	P P4 P415 1: nug. /@ meW- .r;   