##
# Initialize addons configured with --addon=foobar command line switch:
# - get the list of registered add-ons
# - load the addon-main.nas file of each add-on into namespace
#   __addon[ADDON_ID]__
# - call function main() from every such addon-main.nas with the add-on ghost
#   as argument (an addons.Addon instance).

# Example:
#
# fgfs --addon=/foo/bar/baz
#
# - AddonManager.cxx parses /foo/bar/baz/addon-metadata.xml
# - AddonManager.cxx creates prop nodes under /addons containing add-on metadata
# - AddonManager.cxx loads /foo/bar/baz/addon-config.xml into the Property Tree
# - AddonManager.cxx adds /foo/bar/baz to the list of aircraft paths (to get
#   permissions to read files from there)
# - this script loads /foo/bar/baz/addon-main.nas into namespace
#   __addon[ADDON_ID]__
# - this script calls main(addonGhost) from /foo/bar/baz/addon-main.nas.
# - the add-on ghost can be used to retrieve most of the add-on metadata, for
#   instance:
#      addonGhost.id                   the add-on identifier
#      addonGhost.name                 the add-on name
#      addonGhost.version.str()        the add-on version as a string
#      addonGhost.basePath             the add-on base path (realpath() of
#                                      "/foo/bar/baz" here)
#      etc.
#
# For more details, see $FG_ROOT/Docs/README.add-ons.

var id = _setlistener("/sim/signals/fdm-initialized", func {
    removelistener(id);

    foreach (var addon; addons.registeredAddons()) {
      var main_nas = addon.basePath ~ "/addon-main.nas";
      var namespace = "__addon" ~ "[" ~ addon.id ~ "]__";
      logprint(5, "Initializing addon '" ~ addon.name ~
                  "' version " ~ addon.version.str() ~ " from " ~ main_nas ~
                  " in " ~ namespace);
      io.load_nasal( main_nas, namespace );

      var addon_main = globals[namespace]["main"];
      var addon_main_args = [ addon ];
      call(addon_main, addon_main_args); #, object, namespace, error_vector);

      # Tell the world that the add-on is now loaded.
      addon.node.getChild("loaded", 0, 1).setBoolValue(1);
    }
})