# Path: autonetkit/network_model/types.py
# class DeviceType(Enum):
# class PortType(Enum):
#     ROUTER = "Router"
#     SWITCH = "Switch"
#     HOST = "Host"
#     VIRTUAL = "Virtual"
#     BROADCAST_DOMAIN = "Broadcast Domain"
# LAYER3_DEVICES = {DeviceType.ROUTER, DeviceType.HOST}
#     PHYSICAL = "Physical"
#     LOGICAL = "Logical"


from typing import List, Optional, Dict
from pydantic import BaseModel
from autonetkit.network_model.types import DeviceType, PortType, LinkId, PortId, NodeId




class StructuredPort(BaseModel):
    id: Optional[PortId]
    slot: Optional[int]
    type: PortType
    label: Optional[str]
    data: Optional[Dict] = {}
    loopback_zero: Optional[bool]


class StructuredNode(BaseModel):
    id: Optional[NodeId]
    type: Optional[DeviceType]
    label: str
    x: Optional[float]
    y: Optional[float]
    asn: Optional[int]
    target: Optional[int]
    loopback_zero_id: Optional[StructuredPort]
    data: Optional[Dict] = {}
    ports: List[StructuredPort] = []


class StructuredLink(BaseModel):

# Path: autonetkit/network_model/types.py
# class DeviceType(Enum):
# class PortType(Enum):
#     ROUTER = "Router"
#     SWITCH = "Switch"
#     HOST = "Host"
#     VIRTUAL = "Virtual"
#     BROADCAST_DOMAIN = "Broadcast Domain"
# LAYER3_DEVICES = {DeviceType.ROUTER, DeviceType.HOST}
#     PHYSICAL = "Physical"
#     LOGICAL = "Logical"


# Path: autonetkit/load/model.py
from typing import List, Optional, Dict
from pydantic import BaseModel
from autonetkit.network_model.types import DeviceType, PortType, LinkId, PortId, NodeId





class StructuredPort(BaseModel):
    id: Optional[PortId]
    slot: Optional[int]
    type: PortType
    label: Optional[str]
    data: Optional[Dict] = {}
    loopback_zero: Optional[bool]


class StructuredNode(BaseModel):
    id: Optional[NodeId]
    type: Optional[DeviceType]
    label: str
    x: Optional[float]
    y: Optional[float]
    asn: Optional[int]
    target: Optional[int]
    loopback_zero_id: Optional[StructuredPort]
    data: Optional[Dict] = {}
    ports: List[StructuredPort] = []


class StructuredLink(BaseModel):

    id: Optional[LinkId]