"""
Contains all legacy enumerations for interacting with legacy CORE code.
"""

from enum import Enum

CORE_API_VERSION = "1.23"
CORE_API_PORT = 4038


class MessageTypes(Enum):
    """
    CORE message types.
    """
    NODE = 0x01
    LINK = 0x02
    EXECUTE = 0x03
    REGISTER = 0x04
    CONFIG = 0x05
    FILE = 0x06
    INTERFACE = 0x07
    EVENT = 0x08
    SESSION = 0x09
    EXCEPTION = 0x0A


class MessageFlags(Enum):
    """
    CORE message flags.
    """
    ADD = 0x01
    DELETE = 0x02
    CRI = 0x04
    LOCAL = 0x08
    STRING = 0x10
    TEXT = 0x20
    TTY = 0x40


class NodeTlvs(Enum):
    """
    Node type, length, value enumerations.
    """
    NUMBER = 0x01
    TYPE = 0x02
    NAME = 0x03
    IP_ADDRESS = 0x04
    MAC_ADDRESS = 0x05
    IP6_ADDRESS = 0x06
    MODEL = 0x07
    EMULATION_SERVER = 0x08
    SESSION = 0x0A
    X_POSITION = 0x20
    Y_POSITION = 0x21
    CANVAS = 0x22
    EMULATION_ID = 0x23
    NETWORK_ID = 0x24
    SERVICES = 0x25
    LATITUDE = 0x30
    LONGITUDE = 0x31
    ALTITUDE = 0x32
    ICON = 0x42
    OPAQUE = 0x50


class NodeTypes(Enum):
    """
    Node types.
    """
    DEFAULT = 0
    PHYSICAL = 1
    TBD = 3
    SWITCH = 4
    HUB = 5
    WIRELESS_LAN = 6
    RJ45 = 7
    TUNNEL = 8
    KTUNNEL = 9
    EMANE = 10
    TAP_BRIDGE = 11
    PEER_TO_PEER = 12
    CONTROL_NET = 13
    EMANE_NET = 14


class Rj45Models(Enum):
    """
    RJ45 model types.
    """
    LINKED = 0
    WIRELESS = 1
    INSTALLED = 2


# Link Message TLV Types
class LinkTlvs(Enum):
    """
    Link type, length, value enumerations.
    """
    N1_NUMBER = 0x01
    N2_NUMBER = 0x02
    DELAY = 0x03
    BANDWIDTH = 0x04
    PER = 0x05
    DUP = 0x06
    JITTER = 0x07
    MER = 0x08
    BURST = 0x09
    SESSION = 0x0A
    MBURST = 0x10
    TYPE = 0x20
    GUI_ATTRIBUTES = 0x21
    UNIDIRECTIONAL = 0x22
    EMULATION_ID = 0x23
    NETWORK_ID = 0x24
    KEY = 0x25
    INTERFACE1_NUMBER = 0x30
    INTERFACE1_IP4 = 0x31
    INTERFACE1_IP4_MASK = 0x32
    INTERFACE1_MAC = 0x33
    INTERFACE1_IP6 = 0x34
    INTERFACE1_IP6_MASK = 0x35
    INTERFACE2_NUMBER = 0x36
    INTERFACE2_IP4 = 0x37
    INTERFACE2_IP4_MASK = 0x38
    INTERFACE2_MAC = 0x39
    INTERFACE2_IP6 = 0x40
    INTERFACE2_IP6_MASK = 0x41
    INTERFACE1_NAME = 0x42
    INTERFACE2_NAME = 0x43
    OPAQUE = 0x50


class LinkTypes(Enum):
    """
    Link types.
    """
    WIRELESS = 0
    WIRED = 1


class ExecuteTlvs(Enum):
    """
    Execute type, length, value enumerations.
    """
    NODE = 0x01
    NUMBER = 0x02
    TIME = 0x03
    COMMAND = 0x04
    RESULT = 0x05
    STATUS = 0x06
    SESSION = 0x0A


class RegisterTlvs(Enum):
    """
    Register type, length, value enumerations.
    """
    WIRELESS = 0x01
    MOBILITY = 0x02
    UTILITY = 0x03
    EXECUTE_SERVER = 0x04
    GUI = 0x05
    EMULATION_SERVER = 0x06
    SESSION = 0x0A


class ConfigTlvs(Enum):
    """
    Configuration type, length, value enumerations.
    """
    NODE = 0x01
    OBJECT = 0x02
    TYPE = 0x03
    DATA_TYPES = 0x04
    VALUES = 0x05
    CAPTIONS = 0x06
    BITMAP = 0x07
    POSSIBLE_VALUES = 0x08
    GROUPS = 0x09
    SESSION = 0x0A
    INTERFACE_NUMBER = 0x0B
    NETWORK_ID = 0x24
    OPAQUE = 0x50


class ConfigFlags(Enum):
    """
    Configuration flags.
    """
    NONE = 0x00
    REQUEST = 0x01
    UPDATE = 0x02
    RESET = 0x03


class ConfigDataTypes(Enum):
    """
    Configuration data types.
    """
    UINT8 = 0x01
    UINT16 = 0x02
    UINT32 = 0x03
    UINT64 = 0x04
    INT8 = 0x05
    INT16 = 0x06
    INT32 = 0x07
    INT64 = 0x08
    FLOAT = 0x09
    STRING = 0x0A
    BOOL = 0x0B


class FileTlvs(Enum):
    """
    File type, length, value enumerations.
    """
    NODE = 0x01
    NAME = 0x02
    MODE = 0x03
    NUMBER = 0x04
    TYPE = 0x05
    SOURCE_NAME = 0x06
    SESSION = 0x0A
    DATA = 0x10
    COMPRESSED_DATA = 0x11


class InterfaceTlvs(Enum):
    """
    Interface type, length, value enumerations.
    """
    NODE = 0x01
    NUMBER = 0x02
    NAME = 0x03
    IP_ADDRESS = 0x04
    MASK = 0x05
    MAC_ADDRESS = 0x06
    IP6_ADDRESS = 0x07
    IP6_MASK = 0x08
    TYPE = 0x09
    SESSION = 0x0A
    STATE = 0x0B
    EMULATION_ID = 0x23
    NETWORK_ID = 0x24


class EventTlvs(Enum):
    """
    Event type, length, value enumerations.
    """
    NODE = 0x01
    TYPE = 0x02
    NAME = 0x03
    DATA = 0x04
    TIME = 0x05
    SESSION = 0x0A


class EventTypes(Enum):
    """
    Event types.
    """
    NONE = 0
    DEFINITION_STATE = 1
    CONFIGURATION_STATE = 2
    INSTANTIATION_STATE = 3
    RUNTIME_STATE = 4
    DATACOLLECT_STATE = 5
    SHUTDOWN_STATE = 6
    START = 7
    STOP = 8
    PAUSE = 9
    RESTART = 10
    FILE_OPEN = 11
    FILE_SAVE = 12
    SCHEDULED = 13
    RECONFIGURE = 14
    INSTANTIATION_COMPLETE = 15


class SessionTlvs(Enum):
    """
    Session type, length, value enumerations.
    """
    NUMBER = 0x01
    NAME = 0x02
    FILE = 0x03
    NODE_COUNT = 0x04
    DATE = 0x05
    THUMB = 0x06
    USER = 0x07
    OPAQUE = 0x0A


class ExceptionTlvs(Enum):
    """
    Exception type, length, value enumerations.
    """
    NODE = 0x01
    SESSION = 0x02
    LEVEL = 0x03
    SOURCE = 0x04
    DATE = 0x05
    TEXT = 0x06
    OPAQUE = 0x0A


class ExceptionLevels(Enum):
    """
    Exception levels.
    """
    NONE = 0
    FATAL = 1
    ERROR = 2
    WARNING = 3
    NOTICE = 4
