§
    rù©jv  ã                   óþ   — d Z ddlmZmZ ddlmZ ddlmZmZm	Z	m
Z
  G d„ de¦  «        Z G d„ dee¦  «        Zdd
ededefd„Z G d„ de¦  «        Ze G d„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         ZdS )uæ  ThÆ° viá»‡n dÃ¹ng chung Ä‘á»‹nh nghÄ©a cáº¥u trÃºc dá»¯ liá»‡u váº­t pháº©m (Item Data Models) cho AutoPOE2.

Cung cáº¥p cÃ¡c lá»›p enum vÃ  dataclass Ä‘áº¡i diá»‡n cho váº­t pháº©m, Ä‘á»™ hiáº¿m (Rarity)
vÃ  cÃ¡c thuá»™c tÃ­nh bá»• trá»£ (Affixes), Ä‘Ã³ng vai trÃ² Há»£p Ä‘á»“ng dá»¯ liá»‡u duy nháº¥t (Single Source of Truth)
káº¿t ná»‘i cÃ¡c phÃ¢n há»‡ Pickit Filter, Item Inspector vÃ  Tooltip Overlay.
TuÃ¢n thá»§ nghiÃªm ngáº·t chuáº©n tÃ i liá»‡u Google Docstrings theo Rule 16.
é    )Ú	dataclassÚfield)ÚEnum)ÚAnyÚDictÚListÚOptionalc                   ó"   — e Zd ZdZdZdZdZdZdS )Ú
ItemRarityuD   Ä�á»™ hiáº¿m tiÃªu chuáº©n cá»§a váº­t pháº©m trong Path of Exile 2.ÚNORMALÚMAGICÚRAREÚUNIQUEN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   © ó    ú-C:\Projects\AutoPOE2\src\common\item_types.pyr   r      s(   € € € € € ØNÐNà€FØ€EØ€DØ€F€F€Fr   r   c                   óB   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdS )ÚPoe2ItemCategoryuW   PhÃ¢n loáº¡i danh má»¥c váº­t pháº©m Ä‘áº·c trÆ°ng trong Path of Exile 2 (Doc 63 SSoT).ÚGoldÚCurrencyÚWaystonezPrecursor TabletzUncut Skill GemzUncut Support GemzUncut Spirit GemÚRunez	Soul CoreÚCharmÚ	EquipmentÚUnknownN)r   r   r   r   ÚGOLDÚCURRENCYÚWAYSTONEÚPRECURSOR_TABLETÚUNCUT_SKILL_GEMÚUNCUT_SUPPORT_GEMÚUNCUT_SPIRIT_GEMÚRUNEÚ	SOUL_COREÚCHARMÚ	EQUIPMENTÚUNKNOWNr   r   r   r   r      sS   € € € € € ØaÐaà€DØ€HØ€HØ)ÐØ'€OØ+ÐØ)ÐØ€DØ€IØ€EØ€IØ€G€G€Gr   r   Ú ÚnameÚ
item_classÚreturnc                 ó8  ‡— |                       ¦   «         Š|                      ¦   «         }d‰v rt          j        S d‰v sd|v rt          j        S d‰v sd|v rt          j        S d‰v rt          j        S d‰v rt          j        S d‰v rt          j        S d‰v rt          j        S d‰v rt          j	        S d	‰v rt          j
        S t          ˆfd
„dD ¦   «         ¦  «        rt          j        S t          ˆfd„dD ¦   «         ¦  «        rt          j        S t          j        S )uP   PhÃ¢n loáº¡i danh má»¥c váº­t pháº©m POE2 dá»±a trÃªn tÃªn hoáº·c class chuá»—i.ÚgoldÚwaystoneÚtabletzuncut skillzuncut supportzuncut spiritz	soul coreÚruneÚcharmc              3   ó    •K  — | ]}|‰v V — Œ	d S ©Nr   ©Ú.0ÚkÚlowers     €r   ú	<genexpr>z)classify_poe2_category.<locals>.<genexpr>?   s?   øè è € ð  pð  p˜!ˆ1�ˆ:ð  pð  pð  pð  pð  pð  pr   )ÚarmourÚcuirassÚplateÚgarbÚrobeÚdoubletÚvestÚbootsÚglovesÚhelmetÚshieldÚstaffÚbowÚswordÚaxeÚmaceÚquarterstaffÚcrossbowÚfistsÚringÚamuletÚbeltc              3   ó    •K  — | ]}|‰v V — Œ	d S r7   r   r8   s     €r   r<   z)classify_poe2_category.<locals>.<genexpr>A   s?   øè è € ð  jð  j˜!ˆ1�ˆ:ð  jð  jð  jð  jð  jð  jr   )ÚorbÚscrollÚshardÚbaubleÚprismÚscrapÚ	whetstoneÚmirrorÚdivineÚexaltÚannulÚomenÚ	distilledÚessence)r;   r   r    r"   r#   r$   r%   r&   r(   r'   r)   Úanyr*   r!   r+   )r-   r.   Úclass_lowerr;   s      @r   Úclassify_poe2_categoryrd   (   sˆ  ø€ à�JŠJ‰LŒL€EØ×"Ò"Ñ$Ô$€Kà�€€ÝÔ$Ð$Ø�UÐÐ˜j¨KÐ7Ð7ÝÔ(Ð(Ø�5ÐÐ˜H¨Ð3Ð3ÝÔ0Ð0Ø˜ÐÐÝÔ/Ð/Ø˜%ÐÐÝÔ1Ð1Ø˜ÐÐÝÔ0Ð0Ø�eÐÐÝÔ)Ð)Ø�€€ÝÔ$Ð$Ø�%ÐÐÝÔ%Ð%Ý
ð  pð  pð  pð  pð   oð  pñ  pô  pñ  pô  pð *ÝÔ)Ð)Ý
ð  jð  jð  jð  jð   ið  jñ  jô  jñ  jô  jð )ÝÔ(Ð(ÝÔ#Ð#r   c                   ó"   — e Zd ZdZdZdZdZdZdS )Ú	AffixTypeuB   PhÃ¢n loáº¡i vá»‹ trÃ­ cá»§a dÃ²ng thuá»™c tÃ­nh trÃªn trang bá»‹.ÚPREFIXÚSUFFIXÚIMPLICITr+   N)r   r   r   r   rg   rh   ri   r+   r   r   r   rf   rf   F   s(   € € € € € ØLÐLà€FØ€FØ€HØ€G€G€Gr   rf   c                   ó¶   — e Zd ZU dZeed<   ej        Zeed<   dZ	e
e         ed<   dZeed<   dZeed<    ee¬	¦  «        Zee         ed
<   dZeed<   dZeed<   dS )Ú	AffixDatau†  Dá»¯ liá»‡u chi tiáº¿t vá»� má»™t dÃ²ng thuá»™c tÃ­nh bá»• trá»£ (Mod / Affix) trÃªn váº­t pháº©m.

    Attributes:
        text: Chuá»—i vÄƒn báº£n hiá»ƒn thá»‹ nguyÃªn gá»‘c cá»§a thuá»™c tÃ­nh (vÃ­ dá»¥: '+42 to maximum Life').
        affix_type: Loáº¡i thuá»™c tÃ­nh (PREFIX, SUFFIX, IMPLICIT, UNKNOWN).
        tier: Báº­c cá»§a thuá»™c tÃ­nh náº¿u Ä‘Æ°á»£c game cÃ´ng bá»‘ qua phÃ­m Alt (T1, T2, ...), hoáº·c None.
        name: TÃªn danh xÆ°ng cá»§a mod (vÃ­ dá»¥: 'Athlete's', 'of the Rainbow').
        category: NhÃ³m phÃ¢n loáº¡i nghiá»‡p vá»¥ (vÃ­ dá»¥: 'life', 'elemental_res', 'phys_dmg').
        values: Danh sÃ¡ch cÃ¡c giÃ¡ trá»‹ sá»‘ bÃ³c tÃ¡ch Ä‘Æ°á»£c tá»« dÃ²ng chá»¯.
        is_crafted: True náº¿u lÃ  dÃ²ng Ä‘Æ°á»£c thÃªm vÃ o tá»« bÃ n cháº¿ táº¡o (Crafting Bench).
        is_fractured: True náº¿u lÃ  dÃ²ng thuá»™c tÃ­nh cá»‘ Ä‘á»‹nh khÃ´ng thá»ƒ táº©y (Fractured Mod).
    ÚtextÚ
affix_typeNÚtierr,   r-   Úcategory©Údefault_factoryÚvaluesFÚ
is_craftedÚis_fractured)r   r   r   r   ÚstrÚ__annotations__rf   r+   rm   rn   r	   Úintr-   ro   r   Úlistrr   r   Úfloatrs   Úboolrt   r   r   r   rk   rk   O   s¬   € € € € € € ðð ð €I€I�IØ%Ô-€J�	Ð-Ð-Ñ-Ø€Dˆ(�3Œ-ÐÐÑØ€Dˆ#€N€N�NØ€HˆcÐÐÑØ˜%°Ð5Ñ5Ô5€FˆD�ŒKÐ5Ð5Ñ5Ø€J�ÐÐÑØ€L�$ÐÐÑÐÐr   rk   c                   óî  — e Zd ZU dZdZeed<   dZeed<   dZeed<   e	j
        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<   dZeed<   dZeed<    ee¬¦  «        Zee         ed<    ee¬¦  «        Zee         ed<    ee¬¦  «        Zeeef         ed<   dZ eed<   e!defd„¦   «         Z"e!defd„¦   «         Z#e!defd„¦   «         Z$e!defd„¦   «         Z%e!defd„¦   «         Z&dS )ÚItemDatau   MÃ´ hÃ¬nh dá»¯ liá»‡u hoÃ n chá»‰nh cá»§a má»™t váº­t pháº©m trong há»‡ thá»‘ng AutoPOE2.

    Ä�Æ°á»£c sá»­ dá»¥ng xuyÃªn suá»‘t bá»Ÿi cÃ¡c phÃ¢n há»‡ SÃ ng lá»�c nháº·t Ä‘á»“ (Pickit), Ä�Ã¡nh giÃ¡ chuyÃªn sÃ¢u (Inspector)
    vÃ  Hiá»ƒn thá»‹ há»— trá»£ trá»±c quan (Tooltip Overlay HUD).

    Attributes:
        name: TÃªn riÃªng cá»§a váº­t pháº©m (thÆ°á»�ng cÃ³ trÃªn Ä‘á»“ Rare / Unique).
        base_type: PhÃ´i cÆ¡ sá»Ÿ cá»§a váº­t pháº©m (vÃ­ dá»¥: 'Expert Vaal Cuirass', 'Spiked Fists').
        item_class: PhÃ¢n loáº¡i danh má»¥c game (vÃ­ dá»¥: 'Body Armours', 'Gloves', 'Waystones').
        rarity: Ä�á»™ hiáº¿m cá»§a váº­t pháº©m (NORMAL, MAGIC, RARE, UNIQUE).
        item_level: Cáº¥p Ä‘á»™ váº­t pháº©m (iLvl).
        quality: Chá»‰ sá»‘ cháº¥t lÆ°á»£ng (+0% Ä‘áº¿n +20%).
        identified: True náº¿u váº­t pháº©m Ä‘Ã£ Ä‘Æ°á»£c giÃ¡m Ä‘á»‹nh, False náº¿u cÃ²n Unidentified.
        sockets: Sá»‘ lÆ°á»£ng lá»— ngá»�c trÃªn trang bá»‹.
        open_prefixes: Sá»‘ lÆ°á»£ng vá»‹ trÃ­ Prefix cÃ²n trá»‘ng cÃ³ thá»ƒ cháº¿ thÃªm.
        open_suffixes: Sá»‘ lÆ°á»£ng vá»‹ trÃ­ Suffix cÃ²n trá»‘ng cÃ³ thá»ƒ cháº¿ thÃªm.
        max_prefixes: Giá»›i háº¡n Prefix tá»‘i Ä‘a cho loáº¡i phÃ´i nÃ y (máº·c Ä‘á»‹nh 3 cho Ä‘á»“ Rare).
        max_suffixes: Giá»›i háº¡n Suffix tá»‘i Ä‘a cho loáº¡i phÃ´i nÃ y (máº·c Ä‘á»‹nh 3 cho Ä‘á»“ Rare).
        implicits: Danh sÃ¡ch cÃ¡c dÃ²ng thuá»™c tÃ­nh áº©n máº·c Ä‘á»‹nh (Implicit Mods).
        explicits: Danh sÃ¡ch cÃ¡c dÃ²ng thuá»™c tÃ­nh má»Ÿ rá»™ng (Explicit Mods).
        properties: Báº£n Ä‘á»“ lÆ°u trá»¯ cÃ¡c chá»‰ sá»‘ thuá»™c tÃ­nh cÆ¡ sá»Ÿ (Armour, Evasion, Physical Damage, v.v.).
        raw_text: ToÃ n bá»™ vÄƒn báº£n thÃ´ Ä‘á»�c tá»« clipboard khi nháº¥n Ctrl+C vÃ o váº­t pháº©m in-game.

    Example:
        >>> item = ItemData(base_type="Expert Vaal Cuirass", rarity=ItemRarity.RARE, item_level=82)
        >>> print(f"Ä�á»“: {item.base_type}, Rare={item.is_rare}")
    r,   r-   Ú	base_typer.   Úrarityr   Ú
item_levelÚqualityTÚ
identifiedÚsocketsÚopen_prefixesÚopen_suffixesé   Úmax_prefixesÚmax_suffixesrp   Ú	implicitsÚ	explicitsÚ
propertiesÚraw_textr/   c                 ó,   — | j         t          j        k    S )uI   Kiá»ƒm tra váº­t pháº©m cÃ³ pháº£i lÃ  Ä‘á»“ tráº¯ng (Normal) hay khÃ´ng.)r~   r   r   ©Úselfs    r   Ú	is_normalzItemData.is_normal—   ó   € ð Œ{�jÔ/Ò/Ð/r   c                 ó,   — | j         t          j        k    S )uE   Kiá»ƒm tra váº­t pháº©m cÃ³ pháº£i lÃ  Ä‘á»“ xanh (Magic) hay khÃ´ng.)r~   r   r   r�   s    r   Úis_magiczItemData.is_magicœ   s   € ð Œ{�jÔ.Ò.Ð.r   c                 ó,   — | j         t          j        k    S )uE   Kiá»ƒm tra váº­t pháº©m cÃ³ pháº£i lÃ  Ä‘á»“ vÃ ng (Rare) hay khÃ´ng.)r~   r   r   r�   s    r   Úis_rarezItemData.is_rare¡   s   € ð Œ{�jœoÒ-Ð-r   c                 ó,   — | j         t          j        k    S )uE   Kiá»ƒm tra váº­t pháº©m cÃ³ pháº£i lÃ  Ä‘á»“ cam (Unique) hay khÃ´ng.)r~   r   r   r�   s    r   Ú	is_uniquezItemData.is_unique¦   r�   r   c                 ó*   — t          | j        ¦  «        S )uE   Tá»•ng sá»‘ dÃ²ng thuá»™c tÃ­nh explicit hiá»‡n cÃ³ trÃªn trang bá»‹.)Úlenr‰   r�   s    r   Útotal_affixes_countzItemData.total_affixes_count«   s   € õ �4”>Ñ"Ô"Ð"r   N)'r   r   r   r   r-   ru   rv   r}   r.   r   r   r~   r   rw   r€   r�   rz   r‚   rƒ   r„   r†   r‡   r   rx   rˆ   r   rk   r‰   ÚdictrŠ   r   r   r‹   Úpropertyr�   r’   r”   r–   r™   r   r   r   r|   r|   h   s  € € € € € € ðð ð8 €Dˆ#€N€N�NØ€IˆsÐÐÑØ€J�ÐÐÑØ#Ô*€FˆJÐ*Ð*Ñ*Ø€J�ÐÐÑØ€GˆSÐÐÑØ€J�ÐÐÑØ€GˆSÐÐÑØ€M�3ÐÐÑØ€M�3ÐÐÑØ€L�#ÐÐÑØ€L�#ÐÐÑØ!& °tÐ!<Ñ!<Ô!<€Iˆt�IŒÐ<Ð<Ñ<Ø!& °tÐ!<Ñ!<Ô!<€Iˆt�IŒÐ<Ð<Ñ<Ø!& °tÐ!<Ñ!<Ô!<€J��S˜#�X”Ð<Ð<Ñ<Ø€HˆcÐÐÑàð0˜4ð 0ð 0ð 0ñ „Xð0ð ð/˜$ð /ð /ð /ñ „Xð/ð ð.˜ð .ð .ð .ñ „Xð.ð ð0˜4ð 0ð 0ð 0ñ „Xð0ð ð# Sð #ð #ð #ñ „Xð#ð #ð #r   r|   N)r,   )r   Údataclassesr   r   Úenumr   Útypingr   r   r   r	   r   ru   r   rd   rf   rk   r|   r   r   r   ú<module>rŸ      sŠ  ððð ð )Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð �ñ ô ð ðð ð ð ð �s˜Dñ ô ð ð"$ð $ ð $°#ð $Ð?Oð $ð $ð $ð $ð<ð ð ð ð �ñ ô ð ð ðð ð ð ð ñ ô ñ „ðð0 ðE#ð E#ð E#ð E#ð E#ñ E#ô E#ñ „ðE#ð E#ð E#r   