§
    ;›¦j•  ã                   óÈ   — d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	  G d„ de¦  «        Z
e G d„ d	¦  «        ¦   «         Ze G d
„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )u�  
AutoPOE2 - Ange Currency Exchange Routine (Doc 43 P2-2)
=======================================================
Tá»± Ä‘á»™ng tiáº¿p cáº­n NPC Ange táº¡i Hideout/Town Ä‘á»ƒ Ä‘á»•i Exalted Orb láº¥y Orb of Alchemy
khi tÃºi Ä‘á»“ cáº¡n kiá»‡t currency craft báº£n Ä‘á»“.

TuÃ¢n thá»§ báº¥t biáº¿n kiáº¿n trÃºc:
- INV-ANGE-EXCHANGE-01 (Reserve Interlock & Anti-Depletion):
  * NgÆ°á»¡ng sÃ n báº£o vá»‡: Tuyá»‡t Ä‘á»‘i Cáº¤M tiÃªu Exalted Orb náº¿u tá»•ng sá»‘ <= min_exalted_reserve (máº·c Ä‘á»‹nh 5).
  * Ä�á»‹nh má»©c cá»©ng: Má»—i láº§n Ä‘á»•i tá»‘i Ä‘a duy nháº¥t 1 Exalted Orb (batch_size = 1).
  * KhÃ³a ngáº¯t máº¡ch (Circuit Breaker): 2 láº§n Ä‘á»•i liÃªn tiáº¿p khÃ´ng tÄƒng Alchemy -> KhÃ³a 10 phÃºt.
  * Giá»›i háº¡n táº§n suáº¥t: Cooldown tá»‘i thiá»ƒu 60,000ms giá»¯a 2 chu ká»³ Ä‘á»•i.
  * Tá»· giÃ¡ sÃ n: Chá»‰ cháº¥p nháº­n giao dá»‹ch náº¿u tá»· giÃ¡ >= min_alchemy_per_exalt (máº·c Ä‘á»‹nh 10).
é    N)Ú	dataclass)ÚEnum)ÚDictÚOptionalÚTuplec                   ó&   — e Zd ZdZdZdZdZdZdZdS )ÚExchangeStatusÚSUCCESSÚREJECTED_LOW_RESERVEÚREJECTED_COOLDOWNÚREJECTED_LOW_RATEÚCIRCUIT_BREAKER_ACTIVEÚUNSAFE_AREAN)	Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r   r   © ó    ú?C:\Projects\AutoPOE2\src\assistant_tool\pickit\ange_exchange.pyr	   r	      s0   € € € € € Ø€GØ1ÐØ+ÐØ+ÐØ5ÐØ€K€K€Kr   r	   c                   ó8   — e Zd ZU eed<   eed<   eed<   eed<   dS )ÚExchangeDecisionÚallowedÚstatusÚexalted_to_spendÚreasonN)r   r   r   ÚboolÚ__annotations__r	   ÚintÚstrr   r   r   r   r      s:   € € € € € € à€M€M�MØÐÐÑØÐÐÑØ€K€K�K€K€Kr   r   c                   ód   — e Zd ZU dZeed<   dZeed<   dZeed<   dZeed<   d	Z	eed
<   dZ
eed<   dS )ÚAngeExchangeConfigé   Úmin_exalted_reserveé   Ú
batch_sizei`ê  Úcooldown_msiÀ'	 Úcircuit_breaker_timeout_msé
   Úmin_alchemy_per_exalté   Úmax_consecutive_failuresN)r   r   r   r#   r   r   r%   r&   r'   r)   r+   r   r   r   r!   r!   '   sv   € € € € € € à Ð˜Ð Ð Ñ Ø€J�ÐÐÑØ€K�ÐÐÑØ&,Ð Ð,Ð,Ñ,Ø!#Ð˜3Ð#Ð#Ñ#Ø$%Ð˜cÐ%Ð%Ñ%Ð%Ð%r   r!   c                   ó€   — e Zd ZdZddee         fd„Z	 	 ddededed	ee         d
e	f
d„Z
	 	 ddeded	ee         fd„ZdS )ÚAngeCurrencyExchangeManagerus   
    Bá»™ Ä‘iá»�u phá»‘i giao dá»‹ch Ä‘á»•i tiá»�n táº¡i NPC Ange cÃ³ táº§ng báº£o vá»‡ tÃ i nguyÃªn an toÃ n.
    NÚconfigc                 óv   — |pt          ¦   «         | _        d| _        d| _        d| _        d| _        d| _        d S )Nr   )r!   r.   Úlast_exchange_time_msÚconsecutive_failuresÚcircuit_breaker_until_msÚtotal_exchanged_exaltsÚtotal_received_alchemies)Úselfr.   s     r   Ú__init__z$AngeCurrencyExchangeManager.__init__6   sC   € ØÐ4Õ 2Ñ 4Ô 4ˆŒØ*+ˆÔ"Ø)*ˆÔ!Ø-.ˆÔ%Ø+,ˆÔ#Ø-.ˆÔ%Ð%Ð%r   TÚcurrent_exalted_countÚalchemy_rate_per_exaltÚis_in_safe_areaÚnow_msÚreturnc           
      óâ  — |€#t          t          j        ¦   «         dz  ¦  «        }|st          dt          j        dd¬¦  «        S || j        k     r.| j        |z
  dz  }t          dt          j        dd|› d�¬¦  «        S || j        j        k    r.t          dt          j	        dd	|› d
| j        j        › d�¬¦  «        S || j
        z
  | j        j        k     r8| j        j        || j
        z
  z
  }t          dt          j        dd|› d�¬¦  «        S || j        j        k     r.t          dt          j        dd|› d| j        j        › d�¬¦  «        S t          dt          j        | j        j        d¬¦  «        S )ui   
        Ä�Ã¡nh giÃ¡ tiá»�n Ä‘iá»�u kiá»‡n trÆ°á»›c khi phÃ¡t lá»‡nh tÆ°Æ¡ng tÃ¡c Ä‘á»•i tiá»�n.
        Néè  Fr   u9   Vi pháº¡m an toÃ n: KhÃ´ng á»Ÿ trong Hideout hoáº·c Town.)r   r   r   r   uE   Circuit Breaker Ä‘ang kÃ­ch hoáº¡t. Táº¡m dá»«ng Ä‘á»•i tiá»�n trong zs.u2   Vi pháº¡m INV-ANGE-EXCHANGE-01: Sá»‘ Exalted Orb (u   ) <= ngÆ°á»¡ng sÃ n an toÃ n (u   ). Cáº¤M TIÃŠU Dá»° TRá»®!u?   Ä�ang trong thá»�i gian giÃ£n cÃ¡ch Ä‘á»•i tiá»�n (chá»� thÃªm zms).u   Tá»· giÃ¡ Ä‘á»•i quÃ¡ tháº¥p (u     Alchemy/Exalt < ngÆ°á»¡ng sÃ n u   ). Há»§y giao dá»‹ch.TuM   Thá»�a mÃ£n toÃ n bá»™ báº¥t biáº¿n an toÃ n. Cho phÃ©p Ä‘á»•i 1 Exalted Orb.)r   Útimer   r	   r   r2   r   r.   r#   r   r0   r&   r   r)   r   r
   r%   )r5   r7   r8   r9   r:   Úremaining_secÚwait_mss          r   Úevaluate_exchangez-AngeCurrencyExchangeManager.evaluate_exchange>   sý  € ð ˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFð ð 	Ý#ØÝ%Ô1Ø!"ØRð	ñ ô ð ð �DÔ1Ò1Ð1Ø!Ô:¸VÑCÈÑLˆMÝ#ØÝ%Ô<Ø!"ØpÐ_lÐpÐpÐpð	ñ ô ð ð ! D¤KÔ$CÒCÐCÝ#ØÝ%Ô:Ø!"ðoÐI^ð oð oØ37´;Ô3Rðoð oð oðñ ô ð ð �TÔ/Ñ/°4´;Ô3JÒJÐJØ”kÔ-°¸$Ô:TÑ1TÑUˆGÝ#ØÝ%Ô7Ø!"ØfÐY`ÐfÐfÐfð	ñ ô ð ð " D¤KÔ$EÒEÐEÝ#ØÝ%Ô7Ø!"ð_Ð5Kð _ð _Ø&*¤kÔ&Gð_ð _ð _ðñ ô ð õ  ØÝ!Ô)Ø!œ[Ô3Øbð	
ñ 
ô 
ð 	
r   r   ÚsuccessÚreceived_alchemyc                 óJ  — |€#t          t          j        ¦   «         dz  ¦  «        }|r@|dk    r:d| _        || _        | xj        | j        j        z  c_        | xj        |z  c_        dS | xj        dz  c_        | j        | j        j        k    r|| j        j	        z   | _
        dS dS )uv   
        Ghi nháº­n káº¿t quáº£ giao dá»‹ch Ä‘á»ƒ cáº­p nháº­t tráº¡ng thÃ¡i Cooldown hoáº·c Circuit Breaker.
        Nr=   r   r$   )r   r>   r1   r0   r3   r.   r%   r4   r+   r'   r2   )r5   rB   rC   r:   s       r   Úrecord_exchange_resultz2AngeCurrencyExchangeManager.record_exchange_resultˆ   sÁ   € ð ˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFàð 		`Ð'¨!Ò+Ð+Ø()ˆDÔ%Ø)/ˆDÔ&ØÐ'Ô'¨4¬;Ô+AÑAÐ'Ô'ØÐ)Ô)Ð-=Ñ=Ð)Ô)Ð)Ð)àÐ%Ô%¨Ñ*Ð%Ô%ØÔ(¨D¬KÔ,PÒPÐPà06¸¼Ô9_Ñ0_�Ô-Ð-Ð-ð QÐPr   )N)TN)r   N)r   r   r   Ú__doc__r   r!   r6   r   r   r   rA   rE   r   r   r   r-   r-   1   sï   € € € € € ðð ð/ð /˜xÐ(:Ô;ð /ð /ð /ð /ð !%Ø $ðH
ð H
à"ðH
ð !$ðH
ð ð	H
ð
 ˜”ðH
ð 
ðH
ð H
ð H
ð H
ðZ !"Ø $ð	`ð `àð`ð ð`ð ˜”ð	`ð `ð `ð `ð `ð `r   r-   )rF   r>   Údataclassesr   Úenumr   Útypingr   r   r   r	   r   r!   r-   r   r   r   ú<module>rJ      s4  ððð ð €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ð ð  ð  ð  ð  �Tñ  ô  ð  ð ðð ð ð ð ñ ô ñ „ðð ð&ð &ð &ð &ð &ñ &ô &ñ „ð&ðl`ð l`ð l`ð l`ð l`ñ l`ô l`ð l`ð l`ð l`r   