from google.protobuf.internal import containers as _containers
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from collections.abc import Iterable as _Iterable, Mapping as _Mapping
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union

DESCRIPTOR: _descriptor.FileDescriptor

class MeridianNodeTypeProto(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
    __slots__ = ()
    NODE_TYPE_UNSPECIFIED: _ClassVar[MeridianNodeTypeProto]
    NODE_TYPE_ORIGIN: _ClassVar[MeridianNodeTypeProto]
    NODE_TYPE_VESSEL: _ClassVar[MeridianNodeTypeProto]
    NODE_TYPE_MAJOR: _ClassVar[MeridianNodeTypeProto]
    NODE_TYPE_KEYSTONE: _ClassVar[MeridianNodeTypeProto]
    NODE_TYPE_JEWEL_SOCKET: _ClassVar[MeridianNodeTypeProto]
NODE_TYPE_UNSPECIFIED: MeridianNodeTypeProto
NODE_TYPE_ORIGIN: MeridianNodeTypeProto
NODE_TYPE_VESSEL: MeridianNodeTypeProto
NODE_TYPE_MAJOR: MeridianNodeTypeProto
NODE_TYPE_KEYSTONE: MeridianNodeTypeProto
NODE_TYPE_JEWEL_SOCKET: MeridianNodeTypeProto

class MeridianStatBonusProto(_message.Message):
    __slots__ = ("hp", "mp", "dps", "dps_mult", "crit_rate", "crit_dmg", "armor", "evasion", "life_leech", "armor_pen", "attack_speed", "resist", "dmg_reduction")
    HP_FIELD_NUMBER: _ClassVar[int]
    MP_FIELD_NUMBER: _ClassVar[int]
    DPS_FIELD_NUMBER: _ClassVar[int]
    DPS_MULT_FIELD_NUMBER: _ClassVar[int]
    CRIT_RATE_FIELD_NUMBER: _ClassVar[int]
    CRIT_DMG_FIELD_NUMBER: _ClassVar[int]
    ARMOR_FIELD_NUMBER: _ClassVar[int]
    EVASION_FIELD_NUMBER: _ClassVar[int]
    LIFE_LEECH_FIELD_NUMBER: _ClassVar[int]
    ARMOR_PEN_FIELD_NUMBER: _ClassVar[int]
    ATTACK_SPEED_FIELD_NUMBER: _ClassVar[int]
    RESIST_FIELD_NUMBER: _ClassVar[int]
    DMG_REDUCTION_FIELD_NUMBER: _ClassVar[int]
    hp: int
    mp: int
    dps: float
    dps_mult: float
    crit_rate: float
    crit_dmg: float
    armor: int
    evasion: float
    life_leech: float
    armor_pen: float
    attack_speed: float
    resist: float
    dmg_reduction: float
    def __init__(self, hp: _Optional[int] = ..., mp: _Optional[int] = ..., dps: _Optional[float] = ..., dps_mult: _Optional[float] = ..., crit_rate: _Optional[float] = ..., crit_dmg: _Optional[float] = ..., armor: _Optional[int] = ..., evasion: _Optional[float] = ..., life_leech: _Optional[float] = ..., armor_pen: _Optional[float] = ..., attack_speed: _Optional[float] = ..., resist: _Optional[float] = ..., dmg_reduction: _Optional[float] = ...) -> None: ...

class JewelItemProto(_message.Message):
    __slots__ = ("jewel_id", "name", "rarity", "element", "icon", "stats", "lore", "stat_display")
    JEWEL_ID_FIELD_NUMBER: _ClassVar[int]
    NAME_FIELD_NUMBER: _ClassVar[int]
    RARITY_FIELD_NUMBER: _ClassVar[int]
    ELEMENT_FIELD_NUMBER: _ClassVar[int]
    ICON_FIELD_NUMBER: _ClassVar[int]
    STATS_FIELD_NUMBER: _ClassVar[int]
    LORE_FIELD_NUMBER: _ClassVar[int]
    STAT_DISPLAY_FIELD_NUMBER: _ClassVar[int]
    jewel_id: str
    name: str
    rarity: str
    element: str
    icon: str
    stats: MeridianStatBonusProto
    lore: str
    stat_display: _containers.RepeatedScalarFieldContainer[str]
    def __init__(self, jewel_id: _Optional[str] = ..., name: _Optional[str] = ..., rarity: _Optional[str] = ..., element: _Optional[str] = ..., icon: _Optional[str] = ..., stats: _Optional[_Union[MeridianStatBonusProto, _Mapping]] = ..., lore: _Optional[str] = ..., stat_display: _Optional[_Iterable[str]] = ...) -> None: ...

class MeridianNodeProto(_message.Message):
    __slots__ = ("node_id", "name", "meridian", "title", "node_type", "element", "cluster", "x", "y", "lore", "stats", "stat_display", "connected_node_ids")
    NODE_ID_FIELD_NUMBER: _ClassVar[int]
    NAME_FIELD_NUMBER: _ClassVar[int]
    MERIDIAN_FIELD_NUMBER: _ClassVar[int]
    TITLE_FIELD_NUMBER: _ClassVar[int]
    NODE_TYPE_FIELD_NUMBER: _ClassVar[int]
    ELEMENT_FIELD_NUMBER: _ClassVar[int]
    CLUSTER_FIELD_NUMBER: _ClassVar[int]
    X_FIELD_NUMBER: _ClassVar[int]
    Y_FIELD_NUMBER: _ClassVar[int]
    LORE_FIELD_NUMBER: _ClassVar[int]
    STATS_FIELD_NUMBER: _ClassVar[int]
    STAT_DISPLAY_FIELD_NUMBER: _ClassVar[int]
    CONNECTED_NODE_IDS_FIELD_NUMBER: _ClassVar[int]
    node_id: str
    name: str
    meridian: str
    title: str
    node_type: MeridianNodeTypeProto
    element: str
    cluster: str
    x: float
    y: float
    lore: str
    stats: MeridianStatBonusProto
    stat_display: _containers.RepeatedScalarFieldContainer[str]
    connected_node_ids: _containers.RepeatedScalarFieldContainer[str]
    def __init__(self, node_id: _Optional[str] = ..., name: _Optional[str] = ..., meridian: _Optional[str] = ..., title: _Optional[str] = ..., node_type: _Optional[_Union[MeridianNodeTypeProto, str]] = ..., element: _Optional[str] = ..., cluster: _Optional[str] = ..., x: _Optional[float] = ..., y: _Optional[float] = ..., lore: _Optional[str] = ..., stats: _Optional[_Union[MeridianStatBonusProto, _Mapping]] = ..., stat_display: _Optional[_Iterable[str]] = ..., connected_node_ids: _Optional[_Iterable[str]] = ...) -> None: ...

class PlayerMeridianStateProto(_message.Message):
    __slots__ = ("player_id", "available_points", "spent_points", "unlocked_node_ids", "socketed_jewels", "aggregated_stats", "last_updated_at")
    class SocketedJewelsEntry(_message.Message):
        __slots__ = ("key", "value")
        KEY_FIELD_NUMBER: _ClassVar[int]
        VALUE_FIELD_NUMBER: _ClassVar[int]
        key: str
        value: JewelItemProto
        def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[JewelItemProto, _Mapping]] = ...) -> None: ...
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    AVAILABLE_POINTS_FIELD_NUMBER: _ClassVar[int]
    SPENT_POINTS_FIELD_NUMBER: _ClassVar[int]
    UNLOCKED_NODE_IDS_FIELD_NUMBER: _ClassVar[int]
    SOCKETED_JEWELS_FIELD_NUMBER: _ClassVar[int]
    AGGREGATED_STATS_FIELD_NUMBER: _ClassVar[int]
    LAST_UPDATED_AT_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    available_points: int
    spent_points: int
    unlocked_node_ids: _containers.RepeatedScalarFieldContainer[str]
    socketed_jewels: _containers.MessageMap[str, JewelItemProto]
    aggregated_stats: MeridianStatBonusProto
    last_updated_at: int
    def __init__(self, player_id: _Optional[str] = ..., available_points: _Optional[int] = ..., spent_points: _Optional[int] = ..., unlocked_node_ids: _Optional[_Iterable[str]] = ..., socketed_jewels: _Optional[_Mapping[str, JewelItemProto]] = ..., aggregated_stats: _Optional[_Union[MeridianStatBonusProto, _Mapping]] = ..., last_updated_at: _Optional[int] = ...) -> None: ...

class MeridianUnlockRequest(_message.Message):
    __slots__ = ("player_id", "node_id", "client_timestamp_ms")
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    NODE_ID_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    node_id: str
    client_timestamp_ms: int
    def __init__(self, player_id: _Optional[str] = ..., node_id: _Optional[str] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class MeridianUnlockResponse(_message.Message):
    __slots__ = ("success", "node_id", "message", "available_points", "unlocked_node_ids", "aggregated_stats")
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    NODE_ID_FIELD_NUMBER: _ClassVar[int]
    MESSAGE_FIELD_NUMBER: _ClassVar[int]
    AVAILABLE_POINTS_FIELD_NUMBER: _ClassVar[int]
    UNLOCKED_NODE_IDS_FIELD_NUMBER: _ClassVar[int]
    AGGREGATED_STATS_FIELD_NUMBER: _ClassVar[int]
    success: bool
    node_id: str
    message: str
    available_points: int
    unlocked_node_ids: _containers.RepeatedScalarFieldContainer[str]
    aggregated_stats: MeridianStatBonusProto
    def __init__(self, success: _Optional[bool] = ..., node_id: _Optional[str] = ..., message: _Optional[str] = ..., available_points: _Optional[int] = ..., unlocked_node_ids: _Optional[_Iterable[str]] = ..., aggregated_stats: _Optional[_Union[MeridianStatBonusProto, _Mapping]] = ...) -> None: ...

class MeridianSocketRequest(_message.Message):
    __slots__ = ("player_id", "socket_id", "jewel_id", "client_timestamp_ms")
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    SOCKET_ID_FIELD_NUMBER: _ClassVar[int]
    JEWEL_ID_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    socket_id: str
    jewel_id: str
    client_timestamp_ms: int
    def __init__(self, player_id: _Optional[str] = ..., socket_id: _Optional[str] = ..., jewel_id: _Optional[str] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class MeridianSocketResponse(_message.Message):
    __slots__ = ("success", "socket_id", "jewel_id", "message", "aggregated_stats")
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    SOCKET_ID_FIELD_NUMBER: _ClassVar[int]
    JEWEL_ID_FIELD_NUMBER: _ClassVar[int]
    MESSAGE_FIELD_NUMBER: _ClassVar[int]
    AGGREGATED_STATS_FIELD_NUMBER: _ClassVar[int]
    success: bool
    socket_id: str
    jewel_id: str
    message: str
    aggregated_stats: MeridianStatBonusProto
    def __init__(self, success: _Optional[bool] = ..., socket_id: _Optional[str] = ..., jewel_id: _Optional[str] = ..., message: _Optional[str] = ..., aggregated_stats: _Optional[_Union[MeridianStatBonusProto, _Mapping]] = ...) -> None: ...

class MeridianUnsocketRequest(_message.Message):
    __slots__ = ("player_id", "socket_id", "client_timestamp_ms")
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    SOCKET_ID_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    socket_id: str
    client_timestamp_ms: int
    def __init__(self, player_id: _Optional[str] = ..., socket_id: _Optional[str] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class MeridianUnsocketResponse(_message.Message):
    __slots__ = ("success", "socket_id", "removed_jewel_id", "message", "aggregated_stats")
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    SOCKET_ID_FIELD_NUMBER: _ClassVar[int]
    REMOVED_JEWEL_ID_FIELD_NUMBER: _ClassVar[int]
    MESSAGE_FIELD_NUMBER: _ClassVar[int]
    AGGREGATED_STATS_FIELD_NUMBER: _ClassVar[int]
    success: bool
    socket_id: str
    removed_jewel_id: str
    message: str
    aggregated_stats: MeridianStatBonusProto
    def __init__(self, success: _Optional[bool] = ..., socket_id: _Optional[str] = ..., removed_jewel_id: _Optional[str] = ..., message: _Optional[str] = ..., aggregated_stats: _Optional[_Union[MeridianStatBonusProto, _Mapping]] = ...) -> None: ...

class MeridianResetRequest(_message.Message):
    __slots__ = ("player_id", "client_timestamp_ms")
    PLAYER_ID_FIELD_NUMBER: _ClassVar[int]
    CLIENT_TIMESTAMP_MS_FIELD_NUMBER: _ClassVar[int]
    player_id: str
    client_timestamp_ms: int
    def __init__(self, player_id: _Optional[str] = ..., client_timestamp_ms: _Optional[int] = ...) -> None: ...

class MeridianResetResponse(_message.Message):
    __slots__ = ("success", "refunded_points", "available_points", "message")
    SUCCESS_FIELD_NUMBER: _ClassVar[int]
    REFUNDED_POINTS_FIELD_NUMBER: _ClassVar[int]
    AVAILABLE_POINTS_FIELD_NUMBER: _ClassVar[int]
    MESSAGE_FIELD_NUMBER: _ClassVar[int]
    success: bool
    refunded_points: int
    available_points: int
    message: str
    def __init__(self, success: _Optional[bool] = ..., refunded_points: _Optional[int] = ..., available_points: _Optional[int] = ..., message: _Optional[str] = ...) -> None: ...
