"""
Economy Types & Data Transfer Objects for FreeExile Savage Barter Economy.
Defines currencies, salvage fragments, and corruption outcomes.
"""

from enum import Enum
from dataclasses import dataclass, field
from typing import Dict, List, Optional


class SavageCurrencyType(Enum):
    HAC_SO_THACH = "HAC_SO_THACH"                 # Crude Flint (Transmutation)
    DA_MAI_HUYET_NGAN = "DA_MAI_HUYET_NGAN"       # Blood Whetstone (Augmentation)
    UAN_MA_THACH = "UAN_MA_THACH"                 # Feral Amber (Alchemy)
    HUYET_HON_THACH = "HUYET_HON_THACH"           # Primal Bloodstone (Chaos - Market Benchmark)
    U_MINH_COT_DINH = "U_MINH_COT_DINH"           # Wraithbone Spike (Exalted)
    CO_COT_AN = "CO_COT_AN"                       # Ancient Bone Brand (Divine - High Tier Benchmark)
    HUYET_ANH_CO_KINH = "HUYET_ANH_CO_KINH"       # Savage Blood Mirror (Mirror of Kalandra)
    BUI_HUYET_COT = "BUI_HUYET_COT"               # Bloodstone Dust (20 Shards = 1 Huyết Hồn Thạch)


class CorruptionResultType(Enum):
    GOD_TIER_IMPLICIT = "GOD_TIER_IMPLICIT"       # +1 Skill Level, Extra Crit, Max Resists
    BRICKED_CORRUPTED = "BRICKED_CORRUPTED"       # Locked, cannot be modified further
    PERMANENT_DESTROY = "PERMANENT_DESTROY"       # Destroyed into ashes (Item Sink)
    CHAOTIC_MUTATION = "CHAOTIC_MUTATION"         # Affixes reshuffled chaotically


@dataclass(slots=True, frozen=True)
class SalvageYield:
    dust_shards: int
    primal_bloodstones_assembled: int
    bonus_fragments: Dict[str, int] = field(default_factory=dict)
    item_uuid: str = ""
    item_name: str = ""


@dataclass(slots=True, frozen=True)
class CorruptionOutcome:
    result_type: CorruptionResultType
    success: bool
    implicit_added: Optional[str] = None
    message: str = ""
    item_destroyed: bool = False


@dataclass(slots=True)
class ServerEconomyMetrics:
    total_currency_faucets: Dict[str, int] = field(default_factory=dict)
    total_crafting_burns: Dict[str, int] = field(default_factory=dict)
    total_market_tax_burns: Dict[str, int] = field(default_factory=dict)
    total_items_salvaged: int = 0
    total_items_destroyed_by_corruption: int = 0
