from core.emane import emanemanifest
from core.emane import emanemodel

## Custom EMANE Model
class ExampleModel(emanemodel.EmaneModel):
    ### MAC Definition

    # Defines the emane model name that will show up in the GUI.
    name = "emane_example"

    # Defines that mac library that the model will reference.
    mac_library = "rfpipemaclayer"
    # Defines the mac manifest file that will be parsed to obtain configuration options, that will be displayed
    # within the GUI.
    mac_xml = "/usr/share/emane/manifest/rfpipemaclayer.xml"
    # Allows you to override options that are maintained within the manifest file above.
    mac_defaults = {
        "pcrcurveuri": "/usr/share/emane/xml/models/mac/rfpipe/rfpipepcr.xml",
    }
    # Parses the manifest file and converts configurations into core supported formats.
    mac_config = emanemanifest.parse(mac_xml, mac_defaults)

    ### PHY Definition
    # **NOTE: phy configuration will default to the universal model as seen below and the below section does not
    # have to be included.**

    # Defines that phy library that the model will reference, used if you need to provide a custom phy.
    phy_library = None
    # Defines the phy manifest file that will be parsed to obtain configuration options, that will be displayed
    # within the GUI.
    phy_xml = "/usr/share/emane/manifest/emanephy.xml"
    # Allows you to override options that are maintained within the manifest file above or for the default universal
    # model.
    phy_defaults = {
        "subid": "1",
        "propagationmodel": "2ray",
        "noisemode": "none"
    }
    # Parses the manifest file and converts configurations into core supported formats.
    phy_config = emanemanifest.parse(phy_xml, phy_defaults)

    ### Custom override options
    # **NOTE: these options default to what's seen below and do not have to be included.**

    # Allows you to ignore options within phy/mac, used typically if you needed to add a custom option for display
    # within the gui.
    config_ignore = set()
    # Allows you to override how options are displayed with the GUI, using the GUI format of
    # "name:1-2|othername:3-4". This will be parsed into tabs, split by "|" and account for items based on the indexed
    # numbers after ":" for including values in each tab.
    config_groups_override = None
    # Allows you to override the default config matrix list. This value by default is the mac_config + phy_config, in
    # that order.
    config_matrix_override = None