
    @j0                        S r SSKrSSKrSSKrSSKrSSKJrJr  SSKJr  SSK	J
r
Jr  SSKJrJr  \" \5      R#                  5       R$                  r\S-  r\S-  r\S	-  rS
rSrSrSrSrSr\R:                  R=                  SS5      R?                  5       RA                  5       S;   r!S r"S\4S jr#S r$S\%4S jr&S\%4S jr'S r(S r)S r*\+S:X  a   \RX                  " \*" 5       5        gg! \- a    \$" S5        \." SS S!9   gf = f)"aG  
NW AL Scanner Baron Lightning Bridge v003
-----------------------------------------
Uses a dedicated persistent Google Chrome profile so the authorized Baron
widget remembers that the Lightning layer is enabled.

FIRST RUN
---------
1. Run this script normally.
2. A regular Chrome window opens with the Baron map.
3. Open the map's layer/product menu and enable Lightning once.
4. Leave the window open. The bridge captures the Shoals-region lightning
   requests and writes baron_lightning.json.

LATER RUNS
----------
The same Chrome profile is reused, so Lightning should already be enabled.

Optional:
    Set BARON_HEADLESS=1 after the first successful visible run.

Requirement:
    py -m pip install playwright

A separate Playwright Chromium download is not required because this script
uses the installed Google Chrome channel.
    N)datetimetimezone)Path)parse_qsurlparse)async_playwrightTimeoutErrorbaron_chrome_profilezbaron_lightning.jsonzbaron_lightning_status.jsonzhttps://staticbaronwebapps.velocityweather.com/digitial_wx/widgets/mapv2/index.html?initjson=/digitial_wx/widgets/dcms/017da136-5149-4082-aed2-93cd4f1a1683/live/init.json#8.58/34.774/-87.6187gffffffA@gQUi  i,  x   BARON_HEADLESS >   1onyestruec                      [         R                  " [        R                  5      R	                  5       R                  SS5      $ )N+00:00Z)r   nowr   utc	isoformatreplace     baron_lightning_bridge_v003.pyutc_now_isor   @   s+    <<%//199(CHHr   pathc                     U R                  U R                  S-   5      nUR                  [        R                  " USS9SS9  UR                  U 5        g )Nz.tmp   )indentzutf-8)encoding)with_suffixsuffix
write_textjsondumpsr   )r   payloadtemps      r   write_json_atomicr)   D   sB    DKK&01DOODJJwq1GODLLr   c           	      f    [        [        SU [        5       [        [        5      [
        S.UE5        g )Nbaron)providerstateupdatedprofile_dirheadless)r)   STATUS_FILEr   strPROFILE_DIRHEADLESS)r-   extras     r   write_statusr6   J   s2    "}{+ 	
 	

r   urlc                    SU ;  a  g  [        [        U 5      R                  5      n[        US   S   5      [        US   S   5      [        US   S   5      [        US   S   5      S.$ ! [        [
        [        [        4 a     g f = f)Nz/reports/lightning/region.jsonn_latr   s_latw_lone_lon)northsouthwesteast)r   r   queryfloatKeyError
IndexError	TypeError
ValueError)r7   rA   s     r   extract_region_boundsrG   X   s    's2	#,,-5>!,-5>!,-%.+,%.+,	
 	
 j)Z8 s   A A* *BBc                     [        U 5      nU(       d  gUS   [        s=:*  =(       a    US   :*  Os  =(       a    US   [        s=:*  =(       a    US   :*  $ s  $ )NFr>   r=   r?   r@   )rG   
SHOALS_LAT
SHOALS_LON)r7   boundss     r   region_contains_shoalsrL   h   sV    "3'F 	w:888 	;6Nj::F6N::r   c                    [        U [        5      (       ab  U R                  S5      n[        U[        5      (       a  UR                  S/ 5      n O)[        U R                  S5      [        5      (       a  U S   n [        U [        5      (       d  / $ [	        [
        R
                  " 5       S-  5      n/ n[        5       nU  GH  n[        U[        5      (       d  M  UR                  S5      =(       d)    UR                  S5      =(       d    UR                  S5      n[        U[        [        45      (       a  [        U5      S:  a  M   [        US   5      n[        US	   5      nUR                  S
5      =(       d)    UR                  S5      =(       d    UR                  S5      n	S n
[        U	[        [        45      (       a  [	        U	5      n
U
S:  a  U
S-  n
OV[        U	[        5      (       aA   [	        [        R                  " U	R                  SS5      5      R!                  5       S-  5      n
U
c  GMv  X*-
  S:  a  GM  X-
  S:  a  GM  [#        US5      [#        US5      [#        U
S-  5      4nX;   a  GM  UR%                  U5        UR'                  UUU
UR                  SS5      UR                  S5      UR                  S5      S.5        GM     UR)                  S S9  U$ ! [        [        4 a     GM;  f = f! [         a     GMM  f = f)N	lightningdatai  coordinatescoordlocationr   r      time	timestamptl    J)r   r   iO i    typer   	intensitymultiplicity)latlonrV   rX   rY   rZ   c                     U S   $ )NrV   r   )strikes    r   <lambda>#normalize_payload.<locals>.<lambda>   s    F3Kr   )key)
isinstancedictgetlistintrT   settuplelenrB   rE   rF   r2   r   fromisoformatr   rU   roundaddappendsort)r'   rN   now_msstrikesseenitemcoordsr\   r[   raw_timets_msra   s               r   normalize_payloadrv   s   s    '4  KK,	i&&mmFB/GF+T22foGgt$$	t#$FG5D$%% HH]# $xx $xx
# 	
 &4-00CK!O	q	"Cq	"C 88F#Mtxx'<Mhe--ME((#&&** ((h7ikD) = >N*>M)S!}eCmU54<-@A;,!XXk2 $ 8		
c x LL/L0N] :& 		"  s%   K%.A K=%K:9K:=
LLc            
        ^^	^
^#    [         R                  SS9  Sm
SmSm	[        R                  " 5       m[	        5        IS h  vN n [        S[          3SS9  [        S[        (       a  S	OS
 3SS9  U R                  R                  [        [         5      S[        SSS.S/ SQS9I S h  vN nUR                  nU(       a  US   OUR                  5       I S h  vN nUU	U
U4S jnUR                  SU5          TR                  5         [        STSS9  [        SSS9  UR                  [         SSS9I S h  vN   UR#                  5       I S h  vN   [        (       d(  [        SSS9  [        SSS9  [        SSS9  [        SSS9   [        R$                  " TR'                  5       [(        S9I S h  vN   [,        R,                  " 5       n[,        R,                  " 5       U-
  [.        :  ax  T
(       a6  [,        R,                  " 5       T
-
  nU[0        :  a  [        S$T[3        U5      S%9  UR5                  S&5      I S h  vN   [,        R,                  " 5       U-
  [.        :  a  Mx  [        S'SS9  GMx   GN0 GN GN GNC GN. N! [        R*                   a7    T	(       d"  [        STS S9  [        S!SS9  [        S"SS9   GN[        S#SS9   GNf = f N! [6         a>  n[        S(S)U 3S*9  [        S+U 3SS9  UR5                  S&5      I S h  vN     S nANS nAf[8         aD  n[        S([        U5      S*9  [        S,U 3SS9  UR5                  S&5      I S h  vN     S nANS nAff = f! , IS h  vN  (       d  f       g = f7f)-NT)exist_okg        r   Fz+[BARON] Opening persistent Chrome profile: flushz[BARON] Mode: r0   visiblechromei  i  )widthheightzen-US)z--no-first-runz--no-default-browser-checkz%--disable-background-timer-throttlingz --disable-renderer-backgrounding)user_data_dirchannelr0   viewportlocaleargsc                 $  >#    [        U R                  5      (       d  g [        U R                  5      n[        SUS    SUS    SUS    SUS    3SS	9   U R	                  5       I S h  vN n[        U5      n[        [        U5        [        R                  " 5       m[        U5      mSmTR                  5         [        S
TSUS9  [        ST S3SS	9  g  Nl! [         a*  n[        S[        U5      S9  [        SU 3SS	9   S nAg S nAff = f7f)Nz&[BARON] Found Shoals lightning region r>   ,r?   z to r=   r@   Try   liver   )strike_countage_secondsregionz*[BARON] Captured Shoals-region lightning: z recent strikeserrorr   z,[BARON] Could not parse lightning response: )rL   r7   rG   printr%   rv   r)   OUTPUT_FILErT   ri   rg   r6   	Exceptionr2   )	responserK   r'   rp   exccapture_eventcaptured_oncelast_capturelatest_counts	        r   handle_response#run_bridge.<locals>.handle_response   s     *(,,77*8<<8F8'?#1VF^$4D'?#1VF^$46 	 (/+G4!+w7#yy{"7| $!!#!- !!	 @#nO5! 0*  WCH5B3%HsC   ADC *C+A+C DC 
D# DDDDr   loadingzLEnable Lightning once in the visible Baron map if it is not already enabled.)r   instructionz*[BARON] Loading authorized Baron widget...domcontentloadedi`  )
wait_untiltimeoutr   zh[BARON] FIRST-RUN CHECK: In the Chrome window, open the Baron layers/products menu and enable Lightning.zX[BARON] Baron should remember this setting in the dedicated profile for future launches.)r   waiting_for_lightning_layerzQOpen the Baron layer menu in the visible Chrome window and enable Lightning once.z1[BARON] No Shoals lightning request captured yet.z\[BARON] Enable Lightning in the visible Baron map. The bridge will capture it automatically.zN[BARON] No new request during initial wait; continuing with the saved profile.stale)r   r   i:  z:[BARON] Reloading widget for a fresh authorization window.r   zWidget timeout: r   z[BARON] Widget timeout: z[BARON] Bridge error: )r3   mkdirasyncioEventr   r   r4   chromiumlaunch_persistent_contextr2   pagesnew_pager   clearr6   goto
WIDGET_URLbring_to_frontwait_forwaitINITIAL_CAPTURE_WAIT_SECONDSr	   rT   RELOAD_EVERY_SECONDSSTALE_AFTER_SECONDSrf   wait_for_timeoutPlaywrightTimeoutErrorr   )
playwrightcontextr   pager   cycle_startedager   r   r   r   r   s           @@@@r   
run_bridger      sx    t$LLMMMOM!!Z9+G	
 	88ZCD	

 #++EEk*#s3 F 
 
  uQxG,<,<,>&>)	 )	V 	
O,Y4##%!-8	 B$Oii1"     
 ))+++x"D)T"
 A"
 "D)!**%**, <  < !%		iikM14HH#"iikL8!44( '-9,/H
 //777 iikM14HH P] Q "
 '?x
 ," ++ ($9)5!D	 O"& H"& A"&)J 8 * 4W.>se,DE06dC++F333 4WCH5.se4DA++F3334 "!!s'  =NI3NA#M+*I6+/M+I9 M+<=K9I<:KI?7K
*J4J5J9BK?K $K&
K0M+3N6M+9M+<K?KJ:K>K
KKKK
M(.LLLM+M($4M#MM#M+#M((M++N1M42N>Nc                     #    [         R                  5       (       d  [        [         / 5        [        SSS9  [	        5       I S h  vN   g  N7f)Nstartingr   )r   )r   existsr)   r6   r   r   r   r   mainr   q  s3     +r*!,
,s   AAA	A__main__stoppedz
[BARON] Bridge stopped.Try   )/__doc__r   r%   osrT   r   r   pathlibr   urllib.parser   r   playwright.async_apir   r	   r   __file__resolveparentBASE_DIRr3   r   r1   r   rI   rJ   r   r   r   environrd   striplowerr4   r   r)   r6   r2   rG   rL   rv   r   r   __name__runKeyboardInterruptr   r   r   r   <module>r      s?  8   	  '  + Y>!!#**////66  

  " ::>>*B/557==? D 
ID s   Nbj4Z z7DF   7Y)67s   C+ +DD