
    zIj                    l   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	  ee
      j                         j                  d   Zedz  Zdd	d
ddddZg dg dg dg dg dg ddZd#dZd$dZd%dZd&dZd&dZd&dZd&dZd&dZd&dZeeeeeedZefd'dZd(dZefd)d Zd*d!Zed"k(  r e        yy)+zJBuild a compact menu review summary from candidate browser smoke payloads.    )annotationsN)Path)Any   outz&candidate_shop_menu_browser_smoke.jsonz'candidate_party_join_browser_smoke.jsonz'candidate_skill_menu_browser_smoke.jsonz+candidate_equipment_menu_browser_smoke.jsonz(candidate_status_menu_browser_smoke.jsonz%candidate_progress_browser_smoke.json)shoppartyskill	equipmentstatusprogress)r   shopMenushopCandidateMenushopPurchaseshopSale)r   joinjoinMenufollowerRenderdialogueJoin)r   	skillMenuskillMemberMenu)r   equipmentMenuequipmentTargetMenuequipmentEquipequipmentBattleEffect)r   
statusMenustatusMemberMenunewGameStatusMenu)r   recordrestorec                p    | j                         r%t        j                  | j                  d            S i S )Nutf-8encoding)existsjsonloads	read_text)paths    </home/exedev/hwanse/tools/summarize_menu_candidate_review.py	load_jsonr+   "   s)    ;?;;=4::dnngn67PbP    c                V    |D ci c]  }|| v s|| j                  |       c}S c c}w N)get)sourcefieldsfields      r*   copy_fieldsr3   &   s*    28LEVOE6::e$$LLLs   	&&c                ^    | }|D ]%  }t        |t              s y |j                  |      }' |S r.   )
isinstancedictr/   )payloadr)   nodekeys       r*   	menu_rowsr:   *   s7    D $%xx} Kr,   c           
     d    t        | t        d         }dddt        | dddd      xs g iii|d<   |S )Nr   r   rows	snapshotsr3   TOP_LEVEL_FIELDSr:   r7   rows     r*   compact_shoprB   3   sP    
g/7
8C	';
JPVW][]
C Jr,   c                    t        | t        d         }dt        | ddd      xs g iddt        | dddd      xs g iiddt        | dddd      xs g iid	t        | dd
d	      xs g id|d<   |S )Nr	   afterOpenItemsr=   r   savedProgresseventsr   r   actorCollisionTargetsr   )r   r   r   r   r>   r@   s     r*   compact_partyrH   ?   s    
g/8
9C ijJZ[a_a
 )G[&/S[\b`b
 )G[./[cdjhj
 $YwEUWn%o%usu
C$ Jr,   c           
     d    t        | t        d         }dddt        | dddd      xs g iii|d<   |S )Nr
   r   r<   r=   r>   r@   s     r*   compact_skillrJ   V   sP    
g/8
9C	';[RXY_]_
C Jr,   c           
     d    t        | t        d         }dddt        | dddd      xs g iii|d<   |S )Nr   r   r<   r=   r>   r@   s     r*   compact_equipmentrL   b   sP    
g/<
=C	';Z`ageg
C Jr,   c                    t        | t        d         }dt        | ddd      xs i idt        | ddd      xs i id|d<   |S )Nr   r   r=   r   )r   r   r>   r@   s     r*   compact_statusrN   n   sb    
g/9
:C )G[,U[Y[
 )G[:M|\b`b
	C Jr,   c                ^    t        | t        d         }ddt        | ddd      xs i ii|d<   |S )Nr   r    storyFlagReviewr=   r>   r@   s     r*   compact_progressrQ   {   sF    
g/
;
<Cy+yJ[\b`b
C
 Jr,   c                   | dz  }i }i }t         j                         D ]  \  }}||z  }t        |      }t        |   |      }d| |d<   |||<   |j	                         r|j                         j                  nd}	t        t        j                  |dd      j                  d            }
d| |	|
|j                  d	d
      d||<    dddt         d||dS )Nr   zout/
sourceFiler   F),:)ensure_ascii
separatorsr"   r   missing)rS   sourceSizeBytescompactSizeBytesr   z$hwanse-menu-candidate-review-summaryz(tools/summarize_menu_candidate_review.pyreadyzCompact browser menu review contract. It keeps only fields used by web/menu_review.html; raw candidate browser smoke payloads remain audit/build inputs until their other consumers are replaced.)kindr0   r   sourceFilesboundarysourcesmenus)SOURCE_FILESitemsr+   
COMPACTORSr%   statst_sizelenr&   dumpsencoder/   )rootout_dirr`   r_   r9   namer)   r7   compactsource_sizecompact_sizes              r*   build_summaryro      s    UlGE G!'') 
	T~D/S/'*"&tfc
-1[[]diik))4::gEjY``ahij -* ,kk(I6	

 7<#w  r,   c                    dj                  d | d   j                         D              }dt        j                  | d          d| dS )N
c              3    K   | ]  \  }}d t        j                  |       dt        j                  |       dt        j                  t        |j                  dd                   dt        j                  t        |j                  dd                   dt	        |j                  d      xs d      d	d
t	        |j                  d      xs d      d	d  yw)z<tr><td id="z"><code>z</code></td><td>r   -z</td><td><code>rS   rY   r   rT   z	</td><td>rZ   z
</td></tr>N)htmlescapestrr/   int).0r9   infos      r*   	<genexpr>zhtml_page.<locals>.<genexpr>   s      	 C	KK$%Yt{{3/?.@ A{{3txx#6789 :[[TXXlC%@!ABC D488-.3!4Q7 8488./415a8 9		s   CCr_   a%  <!doctype html>
<html lang="ko">
<head>
  <meta charset="utf-8">
  <title>Menu Candidate Review Summary</title>
  <style>
    body { margin: 24px; color: #202124; font-family: system-ui, sans-serif; line-height: 1.5; }
    table { width: 100%; border-collapse: collapse; margin: 14px 0 28px; }
    th, td { border: 1px solid #d7dce2; padding: 6px 8px; text-align: left; vertical-align: top; }
    th { background: #f4f6f8; }
    code { background: #f4f6f8; padding: 1px 4px; }
  </style>
</head>
<body>
  <h1>Menu Candidate Review Summary</h1>
  <p>r^   z</p>
  <table>
    <thead><tr><th>menu</th><th>status</th><th>raw source</th><th>raw bytes</th><th>compact bytes</th></tr></thead>
    <tbody>z$</tbody>
  </table>
</body>
</html>
)r   rb   rt   ru   )summaryr<   s     r*   	html_pager|      sc    99 	 !+113	 	D kk'*%&' ( 6 % r,   c                    |j                  dd       |dz  j                  t        j                  | dd      dz   d	       |d
z  j                  t	        |       d	       y )NT)parentsexist_okz"menu_candidate_review_summary.jsonF   )rV   indentrq   r"   r#   "menu_candidate_review_summary.html)mkdir
write_textr&   rg   r|   )r{   rj   s     r*   write_outputsr      se    MM$M.33??

7q9D@ @  33??	'@R]d?er,   c                 H   t        j                         } | j                  dt        t               | j                  dt        t
               | j                         }t        |j                        }t        ||j                         t        d|j                  dz          y )Nz--root)typedefaultz	--out-dirz'wrote menu candidate review summary -> r   )argparseArgumentParseradd_argumentr   ROOTOUT
parse_argsro   ri   r   rj   print)parserargsr{   s      r*   mainr      s    $$&F
tT:
$<DDII&G'4<<(	3DLLCg4g3h
ijr,   __main__)r)   r   returndict[str, Any])r0   r   r1   z	list[str]r   r   )r7   r   r)   rv   r   r   )r7   r   r   r   )ri   r   r   r   )r{   r   r   rv   )r{   r   rj   r   r   None)r   r   ) __doc__
__future__r   r   rt   r&   pathlibr   typingr   __file__resolver~   r   r   ra   r?   r+   r3   r:   rB   rH   rJ   rL   rN   rQ   rc   ro   r|   r   r   __name__ r,   r*   <module>r      s    P "      H~''*
Ul 566>87 TM7nO/ QM	.		
 " 
  $ @!H <? fk zF r,   