§
    áŽ»jv  ã                   ó@   — d Z ddlmZmZ ddlmZ  G d„ d¦  «        ZdS )zì
Server-Authoritative Inflation Monitor & Dynamic Drop Rate Elasticity (DDRE) for FreeExile.
Monitors Faucets vs Sinks in real-time, calculates Server Inflation Index (SII),
and adjusts dynamic drop modifiers to prevent hyperinflation.
é    )ÚDictÚAny)ÚServerEconomyMetricsc                   óÀ   — e Zd Zddeddfd„Zdededdfd„Zdededdfd	„Zded
edefd„Z	ddeddfd„Z
ddeddfd„Zddedefd„Zddedefd„Zdeeef         fd„ZdS )ÚInflationMonitorçš™™™™™©?Úmarket_tax_rateÚreturnNc                 óH   — || _         t          ¦   «         | _        d| _        d S )Nr   )r	   r   ÚmetricsÚtotal_market_tax_burned)Úselfr	   s     ú9C:\Projects\FreeExile\server\economy\inflation_monitor.pyÚ__init__zInflationMonitor.__init__   s%   € Ø.ˆÔÝ+Ñ-Ô-ˆŒØ'(ˆÔ$Ð$Ð$ó    Úcurrency_nameÚamountc                 ój   — | j         j                             |d¦  «        }||z   | j         j        |<   dS )zCRecords currency generated into circulation (drop, quest, salvage).r   N)r   Útotal_currency_faucetsÚget©r   r   r   Úcurrents       r   Úrecord_faucetzInflationMonitor.record_faucet   s6   € à”,Ô5×9Ò9¸-ÈÑKÔKˆØ=DÀvÑ=MˆŒÔ+¨MÑ:Ð:Ð:r   c                 ój   — | j         j                             |d¦  «        }||z   | j         j        |<   dS )z9Records currency permanently consumed/burned in crafting.r   N)r   Útotal_crafting_burnsr   r   s       r   Úrecord_crafting_sinkz%InflationMonitor.record_crafting_sink   s6   € à”,Ô3×7Ò7¸ÀqÑIÔIˆØ;BÀVÑ;KˆŒÔ)¨-Ñ8Ð8Ð8r   Útrade_amountc                 óÔ   — t          dt          || j        z  ¦  «        ¦  «        }| j        j                             |d¦  «        }||z   | j        j        |<   | xj        |z  c_        |S )z’
        Calculates and burns market transaction tax (e.g. 5%).
        Returns the burned fee amount (removed permanently from economy).
        é   r   )ÚmaxÚintr	   r   Útotal_market_tax_burnsr   r   )r   r   r   Ú
tax_amountr   s        r   Úrecord_market_trade_tax_burnz-InflationMonitor.record_market_trade_tax_burn   sk   € õ
 ˜�C ¨tÔ/CÑ CÑDÔDÑEÔEˆ
Ø”,Ô5×9Ò9¸-ÈÑKÔKˆØ=DÀzÑ=QˆŒÔ+¨MÑ:ØÐ$Ô$¨
Ñ2Ð$Ô$ØÐr   r   Úcountc                 ó0   — | j         xj        |z  c_        d S ©N)r   Útotal_items_salvaged©r   r%   s     r   Úrecord_item_salvagez$InflationMonitor.record_item_salvage&   s   € ØŒÐ)Ô)¨UÑ2Ð)Ô)Ð)Ð)r   c                 ó0   — | j         xj        |z  c_        d S r'   )r   Ú#total_items_destroyed_by_corruptionr)   s     r   Úrecord_item_corruption_destroyz/InflationMonitor.record_item_corruption_destroy)   s   € ØŒÐ8Ô8¸EÑAÐ8Ô8Ð8Ð8r   ÚHUYET_HON_THACHc                 ó  — | j         j                             |d¦  «        }| j         j                             |d¦  «        }| j         j                             |d¦  «        }||z   }|dk    r
|dk    rdndS t          ||z  d¦  «        S )z–
        Computes Server Inflation Index (SII):
        SII = Total Faucets / Max(1, Total Sinks)
        Healthy target: 0.85 <= SII <= 1.10
        r   ç      ð?g      ø?é   )r   r   r   r   r"   Úround)r   r   ÚfaucetsÚcraft_sinksÚ	tax_sinksÚtotal_sinkss         r   Ú calculate_server_inflation_indexz1InflationMonitor.calculate_server_inflation_index,   sŽ   € ð ”,Ô5×9Ò9¸-ÈÑKÔKˆØ”lÔ7×;Ò;¸MÈ1ÑMÔMˆØ”LÔ7×;Ò;¸MÈ1ÑMÔMˆ	Ø! IÑ-ˆà˜!ÒÐØ! Qš,˜,�3�3¨CÐ/å�W˜{Ñ*¨AÑ.Ô.Ð.r   c                 óP   — |                       |¦  «        }|dk    rdS |dk    rdS dS )z�
        Dynamic Drop Rate Elasticity (DDRE):
        Scales drop rates inversely with inflation pressure to protect purchasing power.
        gÍÌÌÌÌÌð?r0   g      ô?gq=
×£pí?çš™™™™™é?)r7   )r   r   Úsiis      r   Úget_dynamic_drop_modifierz*InflationMonitor.get_dynamic_drop_modifier<   s8   € ð
 ×3Ò3°MÑBÔBˆØ�$Š;ˆ;Ø�3Ø�DŠ[ˆ[Ø�4à�4r   c           
      óü   — d}|                       |¦  «        }|                      |¦  «        }d}|dk    rd}n|dk     rd}||||| j        j        | j        j        | j        j        | j        j        | j        j        dœ	S )z@Provides a comprehensive health report for GM and Game Designer.r.   ÚHEALTHY_EQUILIBRIUMg333333ó?ÚINFLATION_WARNINGr9   ÚDEFLATION_BURNING)	ÚstatusÚprimary_currencyÚserver_inflation_indexÚdynamic_drop_multiplierÚtotal_faucetsÚtotal_craft_sinksr"   r(   r,   )r7   r;   r   r   r   r"   r(   r,   )r   Úprimaryr:   Údrop_modr@   s        r   Úget_economy_dashboard_reportz-InflationMonitor.get_economy_dashboard_reportI   s•   € à#ˆØ×3Ò3°GÑ<Ô<ˆØ×1Ò1°'Ñ:Ô:ˆà&ˆØ�Š:ˆ:Ø(ˆFˆFØ�4ŠZˆZØ(ˆFð Ø 'Ø&)Ø'/Ø!œ\Ô@Ø!%¤Ô!BØ&*¤lÔ&IØ$(¤LÔ$EØ37´<Ô3cð

ð 

ð 
	
r   )r   )r   )r.   )Ú__name__Ú
__module__Ú__qualname__Úfloatr   Ústrr!   r   r   r$   r*   r-   r7   r;   r   r   rH   © r   r   r   r      s�  € € € € € ð)ð )¨ð )¸ð )ð )ð )ð )ð
N¨3ð N¸ð NÀð Nð Nð Nð Nð
L°#ð L¸sð LÀtð Lð Lð Lð Lð
	¸#ð 	ÈSð 	ÐUXð 	ð 	ð 	ð 	ð3ð 3¨ð 3°Tð 3ð 3ð 3ð 3ðBð B°Cð BÀð Bð Bð Bð Bð/ð /¸cð /ÐZ_ð /ð /ð /ð /ð ð °sð ÐSXð ð ð ð ð
¨d°3¸°8¬nð 
ð 
ð 
ð 
ð 
ð 
r   r   N)Ú__doc__Útypingr   r   Úserver.economy.economy_typesr   r   rN   r   r   ú<module>rR      sw   ððð ð Ð Ð Ð Ð Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =ðT
ð T
ð T
ð T
ð T
ñ T
ô T
ð T
ð T
ð T
r   