§
    °V¼j©.  ã                   óð   — d Z ddlmZ ddlmZmZmZ ddlmZm	Z	  G d„ de
e¦  «        Z edd¬¦  «         G d	„ d
¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )zÇ
FreeExile MegaShop Catalog Engine.
Authoritative product registry for Items, Skins, Chests, Coins, and Battle Passes.
Enforces mandatory loot box drop rate transparency and account purchase limits.
é    )ÚEnum)ÚDictÚListÚOptional)Ú	dataclassÚfieldc                   ó&   — e Zd ZdZdZdZdZdZdZdS )ÚProductCategoryÚUNKNOWNÚCOINSÚSKINSÚITEMSÚCHESTSÚPASSESN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   © ó    ú1C:\Projects\FreeExile\server\shop\shop_catalog.pyr
   r
      s,   € € € € € Ø€GØ€EØ€EØ€EØ€FØ€F€F€Fr   r
   T)ÚslotsÚfrozenc                   óF   — e Zd ZU eed<   eed<   eed<   eed<   dZeed<   dS )ÚChestDropProbabilityÚitem_idÚitem_name_keyÚrarityÚdrop_chance_percentFÚis_guaranteed_pityN)	r   r   r   ÚstrÚ__annotations__ÚintÚfloatr   Úboolr   r   r   r   r      sM   € € € € € € à€L€L�LØÐÐÑØ€K€K�KØÐÐÑØ$Ð˜Ð$Ð$Ñ$Ð$Ð$r   r   )r   c                   óÔ   — e Zd ZU eed<   eed<   eed<   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Zeed<   dZeed<    ee¬¦  «        Zee         ed<   defd„ZdS )ÚShopProductÚ
product_idÚname_i18n_keyÚdescription_i18n_keyÚcategoryr   Ú
coin_priceg        Úbase_fiat_usdÚoriginal_coin_priceÚdiscount_percentÚpurchase_limit_per_accountÚavailable_until_tsÚ Úbadge_label)Údefault_factoryÚchest_drop_ratesÚreturnc                 óˆ   — | j         dk    r| j        S d| j         z
  dz  }t          t          | j        |z  ¦  «        ¦  «        S )Nr   éd   g      Y@)r.   r+   r"   Úround)ÚselfÚdiscount_factors     r   Úcalculate_discounted_pricez&ShopProduct.calculate_discounted_price-   sG   € ØÔ  AÒ%Ð%Ø”?Ð"Ø Ô!6Ñ6¸%Ñ?ˆÝ•5˜œ¨?Ñ:Ñ;Ô;Ñ<Ô<Ð<r   N)r   r   r   r    r!   r
   r+   r"   r,   r#   r-   r.   r/   r0   r2   r   Úlistr4   r   r   r;   r   r   r   r&   r&      sö   € € € € € € à€O€O�OØÐÐÑØÐÐÑØÐÐÑØ€J�ÐÐÑØ€M�5ÐÐÑØ Ð˜Ð Ð Ñ ØÐ�cÐÐÑØ&'Ð Ð'Ð'Ñ'ØÐ˜ÐÐÑØ€K�ÐÐÑØ38°5ÈÐ3NÑ3NÔ3NÐ�dÐ/Ô0ÐNÐNÑNð=¨Cð =ð =ð =ð =ð =ð =r   r&   c                   ó‚   — e Zd ZdZdd„Zdd„Zdeddfd„Zdede	e         fd	„Z
dee         fd
„Zdedee         fd„ZdS )ÚMegaShopCatalogz<Central Authoritative Catalog for FreeExile Publisher Store.r5   Nc                 ó<   — i | _         |                      ¦   «          d S ©N)Ú	_productsÚ_initialize_default_catalog©r9   s    r   Ú__init__zMegaShopCatalog.__init__7   s!   € Ø13ˆŒØ×(Ò(Ñ*Ô*Ð*Ð*Ð*r   c                 óÔ  — |                       t          dddt          j        ddd¬¦  «        ¦  «         |                       t          dd	d
t          j        ddd¬¦  «        ¦  «         |                       t          dddt          j        ddd¬¦  «        ¦  «         |                       t          dddt          j        ddddd¬¦	  «	        ¦  «         |                       t          dddt          j        ddd ¬¦  «        ¦  «         |                       t          d!d"d#t          j        d$d%¬&¦  «        ¦  «         |                       t          d'd(d)t          j        d*d+¬&¦  «        ¦  «         |                       t          d,d-d.t          j        d/d0¬&¦  «        ¦  «         |                       t          d1d2d3t          j        d4d¬&¦  «        ¦  «         |                       t          d5d6d7t          j        d8d9d:¬;¦  «        ¦  «         |                       t          d<d=d>t          j        ddd?¬;¦  «        ¦  «         |                       t          d@dAdBt          j        dCd¬&¦  «        ¦  «         |                       t          dDdEdFt          j        dGdH¬&¦  «        ¦  «         |                       t          dIdJdKt          j        d8d¬&¦  «        ¦  «         |                       t          dLdMdNt          j        dOd ¬&¦  «        ¦  «         |                       t          dPdQdRt          j        dGdSt          dTdUdVdW¬X¦  «        t          dYdZdd[¬X¦  «        t          d\d]d^d_¬X¦  «        t          d`dad^db¬X¦  «        t          dcdddedfdg¬h¦  «        g¬i¦  «        ¦  «         |                       t          djdkdlt          j        ddmt          dndod^dp¬X¦  «        t          dqdad^dr¬X¦  «        t          dsdtdedu¬X¦  «        t          dvdddedwdg¬h¦  «        g¬i¦  «        ¦  «         |                       t          dxdydzt          j        ddVd{¬¦  «        ¦  «         |                       t          d|d}d~t          j        ddd¬¦  «        ¦  «         d S )€NÚcoin_pack_100zshop.coin.pack_100.namezshop.coin.pack_100.descg®Gáz®ï?r7   r1   )r'   r(   r)   r*   r,   r+   r2   Úcoin_pack_500zshop.coin.pack_500.namezshop.coin.pack_500.descgö(\�Âõ@iô  ÚPOPULARÚcoin_pack_1000zshop.coin.pack_1000.namezshop.coin.pack_1000.descg{®Gáú#@iè  ÚHOTÚcoin_starter_pack_oncezshop.coin.starter_pack.namezshop.coin.starter_pack.descé2   é   zFIRST_BUY_50%_OFF)	r'   r(   r)   r*   r+   r,   r.   r/   r2   Úcoin_pack_2500zshop.coin.pack_2500.namezshop.coin.pack_2500.descg=
×£pý8@iÄ	  Ú
BEST_VALUEÚskin_azure_dragon_bladez!shop.skin.azure_dragon_blade.namez!shop.skin.azure_dragon_blade.desci  Ú	EXCLUSIVE)r'   r(   r)   r*   r+   r2   Úskin_nether_phoenix_robez"shop.skin.nether_phoenix_robe.namez"shop.skin.nether_phoenix_robe.desci`	  Ú	LEGENDARYÚskin_spectral_qilin_mountz#shop.skin.spectral_qilin_mount.namez#shop.skin.spectral_qilin_mount.desci¬  ÚMYTHICÚitem_teleport_scroll_bundlezshop.item.teleport_bundle.namezshop.item.teleport_bundle.descé–   Úitem_inventory_expansion_vaultzshop.item.bag_expansion.namezshop.item.bag_expansion.desciX  é   Ú	ESSENTIAL)r'   r(   r)   r*   r+   r/   r2   Úitem_premium_merchant_stash_tabzshop.item.merchant_stash.namezshop.item.merchant_stash.descÚPREMIUM_TRADEÚitem_astral_respec_pillzshop.item.respec_pill.namezshop.item.respec_pill.desciÂ  Úitem_agent_orb_tier1zshop.item.agent_orb_tier1.namezshop.item.agent_orb_tier1.descéÈ   ÚAI_DELEGATEÚitem_agent_orb_tier2zshop.item.agent_orb_tier2.namezshop.item.agent_orb_tier2.descÚitem_agent_orb_tier3zshop.item.agent_orb_tier3.namezshop.item.agent_orb_tier3.desciÜ  Úchest_celestial_fortunez!shop.chest.celestial_fortune.namez!shop.chest.celestial_fortune.descÚGACHAÚloot_manh_xuong_cozcurr.bone_fragment.namer   g     €F@)r   r   Úloot_da_lua_hoang_dazcurr.savage_flint.nameg      >@Úloot_huyet_hon_thachzcurr.primal_bloodstone.nameé   g      4@Úloot_co_cot_anzcurr.ancient_bone_brand.nameg      @Úloot_huyet_anh_co_kinhzcurr.savage_blood_mirror.nameé   g      à?T)r   r   r   )r'   r(   r)   r*   r+   r2   r4   Úchest_abyssal_sovereignz!shop.chest.abyssal_sovereign.namez!shop.chest.abyssal_sovereign.descÚLIMITEDÚloot_u_minh_cot_dinhzcurr.wraithbone_spike.nameg     €K@Úloot_co_cot_an_x5g     €A@Úloot_unique_skin_aurazshop.skin.abyssal_aura.nameg      !@Úloot_huyet_anh_co_kinh_pureg      ø?Úpass_monthly_astral_blessingzshop.pass.monthly_blessing.namezshop.pass.monthly_blessing.descÚ30_DAYSÚpass_battle_than_ma_lenhzshop.pass.battle_pass_s1.namezshop.pass.battle_pass_s1.descÚSEASON_1)	Úregister_productr&   r
   r   r   r   r   r   r   rC   s    r   rB   z+MegaShopCatalog._initialize_default_catalog;   s÷  € ð 	×Ò�kØ&Ø3Ø!:Ý$Ô*ØØØð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ&Ø3Ø!:Ý$Ô*ØØØ!ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ'Ø4Ø!;Ý$Ô*ØØØð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ/Ø7Ø!>Ý$Ô*ØØØØ'(Ø+ð

ñ 

ô 

ñ 
	ô 
	ð 
	ð 	×Ò�kØ'Ø4Ø!;Ý$Ô*ØØØ$ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ0Ø=Ø!DÝ$Ô*ØØ#ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ1Ø>Ø!EÝ$Ô*ØØ#ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ2Ø?Ø!FÝ$Ô*ØØ ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ4Ø:Ø!AÝ$Ô*ØØð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ7Ø8Ø!?Ý$Ô*ØØ'(Ø#ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ8Ø9Ø!@Ý$Ô*ØØ'(Ø'ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ0Ø6Ø!=Ý$Ô*ØØð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ-Ø:Ø!AÝ$Ô*ØØ%ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ-Ø:Ø!AÝ$Ô*ØØ!ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ-Ø:Ø!AÝ$Ô*ØØ$ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ0Ø=Ø!DÝ$Ô+ØØå$Ð%9Ð;TÐ]^ÐtxÐyÑyÔyÝ$Ð%;Ð=UÐ^_ÐuyÐzÑzÔzÝ$Ð%;Ð=ZÐcdÐz~ÐÑÔÝ$Ð%5Ð7UÐ^_ÐuxÐyÑyÔyÝ$Ð%=Ð?^Ðghð  Bð  W[ð  \ñ  \ô  \ðð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ0Ø=Ø!DÝ$Ô+ØØ!å$Ð%;Ð=YÐbcÐy}Ð~Ñ~Ô~Ý$Ð%8Ð:XÐabÐx|Ð}Ñ}Ô}Ý$Ð%<Ð>[ÐdeÐ{~ÐÑÔÝ$Ð%BÐDcÐlmð  DGð  \`ð  añ  aô  að	ð
ñ 
ô 
ñ 	ô 	ð 	ð$ 	×Ò�kØ5Ø;Ø!BÝ$Ô+ØØØ!ð
ñ 
ô 
ñ 	ô 	ð 	ð 	×Ò�kØ1Ø9Ø!@Ý$Ô+ØØØ"ð
ñ 
ô 
ñ 	ô 	ð 	ð 	ð 	r   Úproductc                 ó$   — || j         |j        <   d S r@   )rA   r'   )r9   rw   s     r   rv   z MegaShopCatalog.register_product   s   € Ø-4ˆŒ�wÔ)Ñ*Ð*Ð*r   r'   c                 ó6   — | j                              |¦  «        S r@   )rA   Úget)r9   r'   s     r   Úget_productzMegaShopCatalog.get_product  s   € ØŒ~×!Ò! *Ñ-Ô-Ð-r   c                 óN   — t          | j                             ¦   «         ¦  «        S r@   )r<   rA   ÚvaluesrC   s    r   Úget_all_productsz MegaShopCatalog.get_all_products  s   € Ý�D”N×)Ò)Ñ+Ô+Ñ,Ô,Ð,r   r*   c                 óN   ‡— ˆfd„| j                              ¦   «         D ¦   «         S )Nc                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS r   )r*   )Ú.0Úpr*   s     €r   ú
<listcomp>z<MegaShopCatalog.get_products_by_category.<locals>.<listcomp>
  s%   ø€ ÐMÐMÐM�a°a´jÀHÒ6LÐ6L�Ð6LÐ6LÐ6Lr   )rA   r}   )r9   r*   s    `r   Úget_products_by_categoryz(MegaShopCatalog.get_products_by_category	  s+   ø€ ØMÐMÐMÐM˜4œ>×0Ò0Ñ2Ô2ÐMÑMÔMÐMr   )r5   N)r   r   r   Ú__doc__rD   rB   r&   rv   r    r   r{   r   r~   r
   r„   r   r   r   r>   r>   4   sß   € € € € € ØFÐFð+ð +ð +ð +ðCð Cð Cð CðJ5¨ð 5¸ð 5ð 5ð 5ð 5ð. cð .¨h°{Ô.Cð .ð .ð .ð .ð- $ {Ô"3ð -ð -ð -ð -ðN°ð NÀTÈ+ÔEVð Nð Nð Nð Nð Nð Nr   r>   N)r…   Úenumr   Útypingr   r   r   Údataclassesr   r   r    r
   r   r&   r>   r   r   r   ú<module>r‰      sQ  ððð ð Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð �c˜4ñ ô ð ð €�˜dÐ#Ñ#Ô#ð%ð %ð %ð %ð %ñ %ô %ñ $Ô#ð%ð €�ÐÑÔð=ð =ð =ð =ð =ñ =ô =ñ Ôð=ð*VNð VNð VNð VNð VNñ VNô VNð VNð VNð VNr   