§
    ©ø¬jz  ã            
       ó
  — d Z ddlZddlZddlmZ ddlmZmZmZ 	  e	ej
        d¦  «        rej
                             d¬¦  «         n# e$ r Y nw xY wej                             d e ee¦  «                             ¦   «         j        j        ¦  «        ¦  «         ddlmZmZ dd	lmZmZmZ dd
lmZ ddlmZ deddfd„Z	 	 ddedee         dedee         fd„Z 	 	 ddedededdfd„Z!dd„Z"e#dk    r e"¦   «          dS dS )uÏ  AutoPOE2 - Atlas Progression Planner CLI Tool (Doc 56 / Doc 65 / Doc 70).
=============================================================================
CÃ´ng cá»¥ dÃ²ng lá»‡nh Ä‘iá»�u phá»‘i tiáº¿n trÃ¬nh má»Ÿ khÃ³a vÃ  thÄƒng tiáº¿n cÃ¢y báº£n Ä‘á»“ Endgame Atlas:
- Quáº£n trá»‹ chiáº¿n lÆ°á»£c thÄƒng tiáº¿n 115+ nodes cho nhÃ¢n váº­t Monk CI Level 1-100.
- KhÃ³a cháº·t báº¥t biáº¿n INV-ATLAS-FARM-NODE (tuyá»‡t Ä‘á»‘i cáº¥m The Burning Monolith / Arbiter of Ash).
- Æ¯u tiÃªn cÃ¡c map má»Ÿ, an toÃ n Tier 15 (Deserted, Fortress, Mineshaft, Creek, Marsh, Dunes).
- Há»— trá»£ mÃ´ phá»�ng tiáº¿n trÃ¬nh cÃ y map liÃªn tá»¥c vÃ  phÃ¢n bá»• Ä‘iá»ƒm CÃ¢y Ná»™i Táº¡i theo DAG.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Cold Path Tier 2 (Python 3.11).
- Rule 4: Module hÃ³a, tá»‡p tinh gá»�n < 150 dÃ²ng, á»§y nhiá»‡m toÃ n bá»™ nghiá»‡p vá»¥ cho src/assistant_tool/atlas/.
- Rule 5: Empirical Definition of Done & [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME].
é    N)ÚPath)ÚAnyÚDictÚOptionalÚreconfigurezutf-8)Úencoding)Ú
AtlasGraphÚcalculate_node_weight)ÚAtlasProgressionPlannerÚProgressionDecisionÚProgressionStrategy)ÚAtlasProgressionService)ÚAtlasKnowledgeBaseÚgraphÚreturnc                 óÀ  — |                       ¦   «         }t          d¦  «         t          d¦  «         t          d¦  «         t          d|d         › �¦  «         t          d|d         › d|d         › d	�¦  «         t          d
|d         › d|d         › d	�¦  «         t          d|d         › �¦  «         t          d|d         › d�¦  «         t          d¦  «         dS )u7   In báº£ng thá»‘ng kÃª tiáº¿n trÃ¬nh hoÃ n thÃ nh Atlas.z<============================================================u5   ðŸ“Š [TIáº¾N TRÃŒNH ATLAS POE2 v0.5.5+ ENDGAME GRAPH]u*     â€¢ Tá»•ng sá»‘ Node trÃªn cÃ¢y:        Útotal_nodesu(     â€¢ Ä�Ã£ hoÃ n thÃ nh (Completed):    Úcompleted_countz (Úcompletion_ratez%)u+     â€¢ Ä�áº¡t má»‘c thÆ°á»Ÿng (Bonus):      Úbonus_completed_countÚbonus_completion_rateu*     â€¢ Node tiáº¿p giÃ¡p biÃªn (Frontier): Úfrontier_countu,     â€¢ Ä�iá»ƒm Ná»™i Táº¡i tÃ­ch lÅ©y:       Útotal_atlas_passive_pointsz PointsN)Úget_completion_statsÚprint)r   Ústatss     ú7C:\Projects\AutoPOE2\tools\atlas_progression_planner.pyÚprint_completion_statsr   '   sþ   € à×&Ò&Ñ(Ô(€EÝ	ˆ(�O„O€OÝ	Ð
AÑBÔBÐBÝ	ˆ(�O„O€OÝ	Ð
M°u¸]Ô7KÐ
MÐ
MÑNÔNÐNÝ	Ð
m°UÐ;LÔ5MÐ
mÐ
mÐQVÐWhÔQiÐ
mÐ
mÐ
mÑnÔnÐnÝ	Ð
|¸Ð>UÔ8VÐ
|Ð
|ÐZ_Ð`wÔZxÐ
|Ð
|Ð
|Ñ}Ô}Ð}Ý	Ð
P°uÐ=MÔ7NÐ
PÐ
PÑQÔQÐQÝ	Ð
e¸Ð?[Ô9\Ð
eÐ
eÐ
eÑfÔfÐfÝ	ˆ(�O„O€O€O€Oó    é   ÚplannerÚcurrent_node_idÚtier_capc           	      óÂ  — |                       ||¬¦  «        }|st          d¦  «         dS t          j        |j        j        ¦  «        rt          d|j        j        › d�¦  «        ‚t          |j        ¦  «        }t          d|j        j        › d|j        j        › d|› d	�¦  «         t          d
|j	        j
        › �¦  «         t          d|j        j        › d|j        j        › d	�¦  «         t          dd                     |j        ¦  «        › �¦  «         t          d|j        › �¦  «         |j        r*t          dd                     |j        ¦  «        › �¦  «         |S )u@   Hoáº¡ch Ä‘á»‹nh bÆ°á»›c Ä‘i tiáº¿p theo trÃªn Ä‘á»“ thá»‹ Atlas.)r"   Úcurrent_tier_capuR   âš ï¸� KhÃ´ng tÃ¬m tháº¥y Node káº¿ tiáº¿p há»£p lá»‡ trong giá»›i háº¡n Tier cap.Nu2   VI PHáº M Báº¤T BIáº¾N INV-ATLAS-FARM-NODE: Node 'u   ' bá»‹ cáº¥m tuyá»‡t Ä‘á»‘i!u)   ðŸŽ¯ [BÆ¯á»šC Ä�I TIáº¾P THEO] -> Node: 'z' (Tier z
, Weight: ú)u      â€¢ Chiáº¿n lÆ°á»£c:     u      â€¢ Node bÆ°á»›c káº¿:   'z' (ID: u      â€¢ Lá»™ trÃ¬nh qua:   z -> u      â€¢ LÃ½ do lá»±a chá»�n: u      â€¢ Tablet gá»£i Ã½:   z, )Úselect_next_noder   r   Ú!is_forbidden_for_waystone_farmingÚtarget_nodeÚnameÚRuntimeErrorr
   ÚtierÚstrategyÚvalueÚnext_step_nodeÚnode_idÚjoinÚroute_node_idsÚreasonÚrecommended_tablets)r!   r"   r#   ÚdecisionÚweights        r   Úplan_next_stepr7   5   sª  € ð ×'Ò'¸ÐZbÐ'ÑcÔc€HØð ÝÐbÑcÔcÐcØˆtõ Ô;¸HÔ<PÔ<UÑVÔVð 
ÝØxÀÔAUÔAZÐxÐxÐxñ
ô 
ð 	
õ # 8Ô#7Ñ8Ô8€FÝ	ð  H°hÔ6JÔ6Oð  Hð  HÐYaÔYmÔYrð  Hð  Hð  Eð  Hð  Hð  Hñ  Iô  Ið  IÝ	Ð
B¨Ô):Ô)@Ð
BÐ
BÑCÔCÐCÝ	Ð
q¨(Ô*AÔ*FÐ
qÐ
qÈxÔOfÔOnÐ
qÐ
qÐ
qÑrÔrÐrÝ	Ð
M v§{¢{°8Ô3JÑ'KÔ'KÐ
MÐ
MÑNÔNÐNÝ	Ð
:¨¬Ð
:Ð
:Ñ;Ô;Ð;ØÔ#ð VÝÐT¨4¯9ª9°XÔ5QÑ+RÔ+RÐTÐTÑUÔUÐUØ€Or   é   ÚserviceÚnum_mapsc                 ó  — t          d|› d�¦  «         t          | j        ¬¦  «        }t          |¦  «        D ]º}|                     |¬¦  «        }|st          d|dz   › d�¦  «          n‰|j        }|                      |j        dd	|d
z  z   |dz  dœd|dz   z  ¬¦  «        }|j        r|j        j	        nd}t          d|dz   d›d|j	        › d|j
        › d|› d|j        d›d|j        d›d�¦  «         Œ»t          | j        ¦  «         dS )un   MÃ´ phá»�ng chuá»—i cÃ y map liÃªn tá»¥c vÃ  phÃ¢n bá»• Ä‘iá»ƒm CÃ¢y Ná»™i Táº¡i (Rule 5 Headless Simulation).u    
ðŸš€ Khá»Ÿi cháº¡y mÃ´ phá»�ng uR    maps liÃªn tiáº¿p [MÃ” PHá»ŽNG THUáº¬T TOÃ�N HEADLESS - KHÃ”NG PHáº¢I LIVE GAME]:)r   )r%   u-   âš ï¸� Háº¿t node kháº£ dá»¥ng á»Ÿ map thá»© é   ú!Té   é   é   )z	Chaos OrbzExalted OrbiÜ  )r0   Úbonus_completedÚwalletÚcurrent_goldÚNonez  [Map Ú02dz] 'z' (Tz) -> +1 Atlas Point | Passive: z | Net Worth: z.1fzC (Delta: +zC)N)r   r   Úatlas_graphÚranger'   r)   Úon_map_completedr0   Únewly_allocated_passiver*   r,   Úcurrent_net_worth_chaosÚdelta_net_worth_chaosr   )	r9   r:   r#   r!   Úir5   ÚtargetÚresÚ
alloc_names	            r   Úsimulate_multi_maprP   Q   s­  € õ 
ð  K¨hð  Kð  Kð  Kñ  Lô  Lð  LÝ%¨GÔ,?Ð@Ñ@Ô@€Gå�8‰_Œ_ð 
ð 
ˆØ×+Ò+¸XÐ+ÑFÔFˆØð 	ÝÐHÀ!ÀAÁ#ÐHÐHÐHÑIÔIÐIØˆEàÔ%ˆØ×&Ò&Ø”NØ Ø!# a¨"¡f¡¸QÀ!¹VÐDÐDØ  Q¡™ð	 'ñ 
ô 
ˆð :=Ô9TÐ`�SÔ0Ô5Ð5ÐZ`ˆ
Ýðh�a˜‘cÐEð hð h &¤+ð hð h°6´;ð hð hØ)3ðhð hàÔ5Ðgðhð hàFIÔF_Ðgðhð hð hñ	
ô 	
ð 	
ð 	
õ ˜7Ô.Ñ/Ô/Ð/Ð/Ð/r   c                  ó¢  — t          j        d¬¦  «        } |                      dg d¢dd¬¦  «         |                      dt          d	d
¬¦  «         |                      dt          dd¬¦  «         |                      ddd¬¦  «         |                      ¦   «         }t          ¦   «         }t          |j        ¦  «        }t          |j	        |¬¦  «        }|j
        s$|j        s1t          t          j        ¦  «        dk    rt          |j	        ¦  «         |j        dk    rt!          ||j        |j        ¬¦  «         d S t%          ||j        ¬¦  «         d S )Nz+AutoPOE2 Atlas Progression Planner CLI Tool)Údescriptionz
--strategy)ÚFULL_COMPLETION_RUSHÚBONUS_POINTS_RUSHÚCITADEL_PINNACLE_RUSHÚSPECIAL_ENCOUNTER_FARMrS   u0   Chiáº¿n lÆ°á»£c Ä‘iá»�u phá»‘i Ä‘á»“ thá»‹ Atlas)ÚchoicesÚdefaultÚhelpz
--tier-capr    u   Cáº¥p Ä‘á»™ Tier tá»‘i Ä‘a)ÚtyperX   rY   z--simulate-mapsr   u&   Sá»‘ map mÃ´ phá»�ng cÃ y liÃªn tiáº¿pz--statsÚ
store_trueu&   Hiá»ƒn thá»‹ thá»‘ng kÃª tiáº¿n trÃ¬nh)ÚactionrY   )r   r-   r<   )r:   r#   )r#   )ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr   r   r-   r   rF   r   Úsimulate_mapsÚlenÚsysÚargvr   rP   r#   r7   )ÚparserÚargsr9   r-   r!   s        r   Úmainrh   q   s`  € ÝÔ$Ð1^Ð_Ñ_Ô_€FØ
×ÒØØpÐpÐpØ&Ø?ð	 ñ ô ð ð ×Ò˜­3¸ÐA]ÐÑ^Ô^Ð^Ø
×ÒÐ)µ¸QÐEmÐÑnÔnÐnØ
×Ò˜	¨,Ð=eÐÑfÔfÐfØ×ÒÑÔ€Då%Ñ'Ô'€GÝ" 4¤=Ñ1Ô1€HÝ%¨GÔ,?È(ÐSÑSÔS€Gà„zð 4˜$Ô,ð 4µµS´X±´À!Ò1CÐ1CÝ˜wÔ2Ñ3Ô3Ð3àÔ˜AÒÐÝ˜7¨TÔ-?È$Ì-ÐXÑXÔXÐXÐXÐXå�w¨¬Ð7Ñ7Ô7Ð7Ð7Ð7r   Ú__main__)Nr    )r8   r    )r   N)$Ú__doc__r]   rd   Úpathlibr   Útypingr   r   r   ÚhasattrÚstdoutr   Ú	ExceptionÚpathÚinsertÚstrÚ__file__ÚresolveÚparentÚsrc.assistant_tool.atlas.graphr	   r
   Ú,src.assistant_tool.atlas.progression_plannerr   r   r   Ú,src.assistant_tool.atlas.progression_servicer   Ú'src.assistant_tool.atlas_knowledge_baser   r   r`   r7   rP   rh   Ú__name__© r   r   ú<module>r|      sD  ððð ð €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ð	Ø€wˆsŒz˜=Ñ)Ô)ð 1ØŒ
×Ò¨ÐÑ0Ô0Ð0øøØð 	ð 	ð 	Ø€Dð	øøøð „‡‚��3�3�t�t˜H‘~”~×-Ò-Ñ/Ô/Ô6Ô=Ñ>Ô>Ñ ?Ô ?Ð ?à LÐ LÐ LÐ LÐ LÐ LÐ LÐ Lðð ð ð ð ð ð ð ð ð ð
 QÐ PÐ PÐ PÐ PÐ PØ FÐ FÐ FÐ FÐ FÐ Fð *ð °ð ð ð ð ð  &*Øðð Ø$ðà˜c”]ðð ðð Ð!Ô"ð	ð ð ð ð< Øð0ð 0Ø$ð0àð0ð ð0ð 
ð	0ð 0ð 0ð 0ð@8ð 8ð 8ð 8ð4 ˆzÒÐØ€D�F„F€F€F€Fð Ðs   œ,A	 Á	AÁA