§
    ’¬j6!  ã                  óÂ   — d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZmZmZ ddlmZmZ e G d„ d	¦  «        ¦   «         Z G d
„ d¦  «        ZdS )u  AutoPOE2 - Currency Exchange Orchestrator (Doc 43 / Doc 68 / Doc 69).
=======================================================================
Bá»™ Ä‘iá»�u phá»‘i tá»± hÃ nh phiÃªn giao dá»‹ch SÃ n Ngoáº¡i Há»‘i (Faustus Currency Exchange):
- TÆ°Æ¡ng tÃ¡c qua phÃ­m táº¯t chuáº©n SSoT: Má»Ÿ sÃ n báº±ng phÃ­m '/' (VK_OEM_2 0xBF), Ä‘Ã³ng báº±ng Spacebar (VK_SPACE 0x20).
- Ã�p dá»¥ng cÃ¡c táº§ng khÃ³a liÃªn Ä‘á»™ng an toÃ n:
  * Safe Hideout Area (INV-EXCHANGE-SAFE-AREA): Chá»‰ má»Ÿ sÃ n táº¡i Hideout hoáº·c Town, cáº¥m má»Ÿ trong Map chiáº¿n Ä‘áº¥u.
  * Gold Tax Interlock (INV-EXCHANGE-GOLD-TAX): Ä�áº£m báº£o khÃ´ng xÃ¢m pháº¡m quá»¹ vÃ ng sinh tá»“n.
  * Slippage Guard (INV-EXCHANGE-SLIPPAGE-GUARD): Chá»‘ng trÆ°á»£t giÃ¡ báº¥t thÆ°á»�ng so vá»›i POE2 Scout.
  * Cooldown & Circuit Breaker: GiÃ£n cÃ¡ch 5 phÃºt vÃ  khÃ³a 10 phÃºt náº¿u lá»—i liÃªn tiáº¿p.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Cold Path Tier 2 (Python 3.11).
- Rule 4: Module hÃ³a, tráº§n file < 500 dÃ²ng.
- Rule 7: PhÃ­m '/' má»Ÿ Currency Exchange, Spacebar Ä‘Ã³ng panels.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚAnyÚCallableÚDictÚListÚOptionalÚTuple)ÚCurrencyItemÚCurrencyTierÚExchangeActionTypeÚExchangeOrderÚExchangeOrderStatusÚExchangePortfolioConfig)ÚCurrencyPortfolioOptimizerÚOptimizationResultc                  ó˜   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   ded
<   ded<   dZded<    ee¬¦  «        Zded<   dZ	ded<   dS )ÚExchangeExecutionReportuG   BÃ¡o cÃ¡o káº¿t quáº£ thá»±c thi phiÃªn giao dá»‹ch SÃ n Ngoáº¡i Há»‘i.ÚstrÚstatusÚintÚorders_plannedÚorders_executedÚ
gold_spentÚfloatÚchaos_convertedÚdivine_convertedÚmirror_convertedÚ Úerror)Údefault_factoryz	List[str]Únotesr   Útimestamp_msN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r!   r   Úlistr#   r$   © ó    úRC:\Projects\AutoPOE2\src\assistant_tool\currency_exchange\exchange_orchestrator.pyr   r   %   s¢   € € € € € € àQÐQØ€K€K�KØÐÐÑØÐÐÑØ€O€O�OØÐÐÑØÐÐÑØÐÐÑØ€E€O€O€O�OØ�u¨TÐ2Ñ2Ô2€EÐ2Ð2Ð2Ñ2Ø€LÐÐÐÑÐÐr,   r   c                  óN   — e Zd ZdZ	 	 	 d d!d	„Zd"d„Z	 d#d$d„Z	 	 	 d%d&d„Zd'd„ZdS )(ÚCurrencyExchangeOrchestratoruA   Bá»™ Ä‘iá»�u phá»‘i SÃ n Ngoáº¡i Há»‘i Faustus Currency Exchange.NÚconfigú!Optional[ExchangePortfolioConfig]Ú	optimizerú$Optional[CurrencyPortfolioOptimizer]Úpress_key_funcúOptional[Callable[[int], None]]c                ó®   — |pt          ¦   «         | _        |pt          | j        ¬¦  «        | _        || _        d| _        d| _        d| _        d| _        d S )N)r0   r   )	r   r0   r   r2   r4   Úlast_exchange_time_msÚconsecutive_failuresÚcircuit_breaker_until_msÚtotal_exchanged_sessions)Úselfr0   r2   r4   s       r-   Ú__init__z%CurrencyExchangeOrchestrator.__init__7   s_   € ð Ð9Õ 7Ñ 9Ô 9ˆŒØ"ÐTÕ&@ÈÌÐ&TÑ&TÔ&TˆŒØ,ˆÔØ*+ˆÔ"Ø)*ˆÔ!Ø-.ˆÔ%Ø-.ˆÔ%Ð%Ð%r,   Ú	area_namer   ÚreturnÚboolc                óB   — |                      ¦   «         }d|v pd|v pd|v S )u:   Kiá»ƒm tra khu vá»±c an toÃ n (chá»‰ Hideout hoáº·c Town).ÚhideoutÚtownÚ
encampment)Úlower)r;   r=   rD   s      r-   Úis_safe_areaz)CurrencyExchangeOrchestrator.is_safe_areaE   s/   € à—’Ñ!Ô!ˆØ˜UÐ"ÐS¨°%¨ÐS¸\ÈUÐ=RÐSr,   Úcurrent_goldr   Únow_msúOptional[int]úTuple[bool, str]c                ó|  — |€#t          t          j        ¦   «         dz  ¦  «        }|                      |¦  «        sdd|› d�fS || j        k     r| j        |z
  dz  }dd|› d�fS || j        z
  }|| j        j        k     r| j        j        |z
  dz  }dd|› d	�fS || j        j        k    rdd
|› d| j        j        › d�fS dS )u[   Ä�Ã¡nh giÃ¡ cÃ¡c Ä‘iá»�u kiá»‡n an toÃ n tiÃªn quyáº¿t trÆ°á»›c khi phÃ¡t lá»‡nh má»Ÿ sÃ n.Néè  Fu)   Vi pháº¡m khu vá»±c an toÃ n: Ä�ang á»Ÿ 'u+   ', cáº¥m má»Ÿ sÃ n ngoáº¡i há»‘i trong map!uA   Circuit Breaker Ä‘ang kÃ­ch hoáº¡t: KhÃ³a sÃ n giao dá»‹ch thÃªm u    giÃ¢y.u?   Ä�ang trong thá»�i gian giÃ£n cÃ¡ch Ä‘á»•i tiá»�n (chá»� thÃªm zs).u   Quá»¹ vÃ ng (u   ) <= ngÆ°á»¡ng an toÃ n (z).)Tu*   Sáºµn sÃ ng thá»±c thi phiÃªn giao dá»‹ch.)r   ÚtimerE   r9   r7   r0   Úcooldown_msÚmin_gold_reserve)r;   r=   rF   rG   Úrem_sÚelapsedÚwait_ss          r-   Úevaluate_preconditionsz3CurrencyExchangeOrchestrator.evaluate_preconditionsJ   s  € ð ˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFð × Ò  Ñ+Ô+ð 	}ØÐ|ÀiÐ|Ð|Ð|Ð|Ð|ð �DÔ1Ò1Ð1ØÔ2°VÑ;ÀÑDˆEØÐlÐ^cÐlÐlÐlÐlÐlð ˜4Ô5Ñ5ˆØ�T”[Ô,Ò,Ð,Ø”kÔ-°Ñ7¸DÑ@ˆFØÐgÐ\bÐgÐgÐgÐgÐgð ˜4œ;Ô7Ò7Ð7ØÐq¨,ÐqÐqÐQUÔQ\ÔQmÐqÐqÐqÐqÐqàAÐAr,   úShoreline HideoutFÚwalletúDict[str, int]Úmarket_prices_in_chaosúDict[str, float]Úis_simulatedr   c                óî  — |€#t          t          j        ¦   «         dz  ¦  «        }|                      |||¬¦  «        \  }}|st          ddddddd||¬¦	  «	        S | j                             |||¬¦  «        }	|	j        st          d	dddddd|	j        |¬
¦	  «	        S | j        r†|s„	 |                      d¦  «         t          j	        d¦  «         nY# t          $ rL}
|                      |¦  «         t          dt          |	j        ¦  «        dddddd|
› �|¬¦	  «	        cY d}
~
S d}
~
ww xY wd}d}|	j        D ]"}t          j        |_        |dz  }||j        z  }Œ#| j        r=|s;	 |                      d¦  «         t          j	        d¦  «         n# t          $ r Y nw xY w|| _        d| _        | xj        dz  c_        t          dt          |	j        ¦  «        |||	j        |	j        |	j        |	j        |¬
¦	  «	        S )u½   
        Thá»±c thi trá»�n gÃ³i má»™t phiÃªn giao dá»‹ch ngoáº¡i há»‘i tá»± hÃ nh:
        Precheck -> Optimize -> Open UI ('/') -> Execute Orders -> Close UI (Spacebar) -> Report.
        NrK   )rG   ÚREJECTEDr   g        )	r   r   r   r   r   r   r   r!   r$   )rT   rV   rF   ÚNO_ORDERS_NEEDED)	r   r   r   r   r   r   r   r#   r$   é¿   g      à?ÚERRORu(   KhÃ´ng thá»ƒ phÃ¡t phÃ­m '/' má»Ÿ sÃ n: é   é    g333333Ó?ÚSUCCESS)r   rL   rR   r   r2   Úoptimize_portfolioÚordersÚsummary_notesr4   ÚsleepÚ	ExceptionÚ_record_failureÚlenr   Ú	COMPLETEDr   Úestimated_gold_taxr7   r8   r:   Únet_chaos_gainÚnet_divine_gainÚnet_mirror_gain)r;   rT   rV   rF   r=   rX   rG   ÚsafeÚreasonÚplanÚeÚexecuted_countr   Úorders                 r-   Úexecute_sessionz,CurrencyExchangeOrchestrator.execute_sessioni   s¹  € ð ˆ>Ý�œ™œ tÑ+Ñ,Ô,ˆFà×2Ò2°9¸lÐSYÐ2ÑZÔZ‰ˆˆfØð 	Ý*Ø!Ø Ø !ØØ #Ø!"Ø!"ØØ#ð
ñ 
ô 
ð 
ð $(¤>×#DÒ#DØØ#9Ø%ð $Eñ $
ô $
ˆð Œ{ð 	Ý*Ø)Ø Ø !ØØ #Ø!"Ø!"ØÔ(Ø#ð
ñ 
ô 
ð 
ð Ôð 	 |ð 	ðà×#Ò# DÑ)Ô)Ð)Ý”
˜3‘”��øÝð ð ð Ø×$Ò$ VÑ,Ô,Ð,Ý.Ø"Ý#& t¤{Ñ#3Ô#3Ø$%Ø Ø$'Ø%&Ø%&ØHÀQÐHÐHØ!'ð
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøøðøøøð ˆØˆ
Ø”[ð 	3ð 	3ˆEå.Ô8ˆEŒLØ˜aÑˆNØ˜%Ô2Ñ2ˆJˆJð Ôð 	 |ð 	ðØ×#Ò# DÑ)Ô)Ð)Ý”
˜3‘”��øÝð ð ð Ø�ðøøøð &,ˆÔ"Ø$%ˆÔ!ØÐ%Ô%¨Ñ*Ð%Ô%å&ØÝ˜tœ{Ñ+Ô+Ø*Ø!Ø Ô/Ø!Ô1Ø!Ô1ØÔ$Øð

ñ 

ô 

ð 
	
s1   Â&)C Ã
D&ÃAD!ÄD&Ä!D&Å!)F Æ
FÆFÚNonec                ó|   — | xj         dz  c_         | j         | j        j        k    r|| j        j        z   | _        dS dS )uL   Ghi nháº­n lá»—i Ä‘á»ƒ kÃ­ch hoáº¡t Circuit Breaker náº¿u vÆ°á»£t ngÆ°á»¡ng.r^   N)r8   r0   Úmax_consecutive_failuresÚcircuit_breaker_timeout_msr9   )r;   rG   s     r-   rf   z,CurrencyExchangeOrchestrator._record_failureÓ   sJ   € àÐ!Ô! QÑ&Ð!Ô!ØÔ$¨¬Ô(LÒLÐLØ,2°T´[Ô5[Ñ,[ˆDÔ)Ð)Ð)ð MÐLr,   )NNN)r0   r1   r2   r3   r4   r5   )r=   r   r>   r?   )N)r=   r   rF   r   rG   rH   r>   rI   )rS   FN)rT   rU   rV   rW   rF   r   r=   r   rX   r?   rG   rH   r>   r   )rG   r   r>   rt   )	r%   r&   r'   r(   r<   rE   rR   rs   rf   r+   r,   r-   r/   r/   4   s¾   € € € € € ØKÐKð 59Ø:>Ø:>ð	/ð /ð /ð /ð /ðTð Tð Tð Tð !%ð	Bð Bð Bð Bð BðH -Ø"Ø $ðh
ð h
ð h
ð h
ð h
ðT\ð \ð \ð \ð \ð \r,   r/   )r(   Ú
__future__r   rL   Údataclassesr   r   Útypingr   r   r   r	   r
   r   Ú+src.assistant_tool.currency_exchange.modelsr   r   r   r   r   r   Ú8src.assistant_tool.currency_exchange.portfolio_optimizerr   r   r   r/   r+   r,   r-   ú<module>r}      sf  ððð ð  #Ð "Ð "Ð "Ð "Ð "à €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ðð ð ð ð ñ ô ñ „ððc\ð c\ð c\ð c\ð c\ñ c\ô c\ð c\ð c\ð c\r,   