#!/usr/bin/env python3

import os
import envtpl
from mflog import get_logger
from mfplugin.manager import PluginsManager

MFDATA_PLUGIN_HOME = os.path.join(os.environ["MFMODULE_RUNTIME_HOME"],
                                  "var", "plugins")
LOGGER = get_logger("_make_directory_observer")


manager = PluginsManager()
plugin_confs = []
directory_observer_ini_file = \
    os.path.join(os.environ['MFMODULE_HOME'], 'config',
                 'directory_observer.ini')
with open(directory_observer_ini_file, "r") as f:
    content = f.read()

for plugin in manager.plugins.values():
    try:
        plugin.load_full()
    except Exception as e:
        LOGGER.warning("invalid plugin: %s (%s) => ignoring it ; details: %s" %
                       (plugin.name, plugin.home, e))
        continue
    with plugin.plugin_env_context():
        plugin.reload()
        steps_to_add = []
        for step in plugin.configuration.steps:
            if step.retry_total > 0:
                reinject_step = step.duplicate(step.name + "_reinject")
                reinject_step.set_watched_directories(
                    "{MFDATA_CURRENT_STEP_DIR}")
                steps_to_add.append(reinject_step)
        for step in steps_to_add:
            plugin.configuration.add_step(step)
        plugin_confs.append(plugin)

extra_variables = {
    "PLUGINS": plugin_confs,
}
print(envtpl.render_string(content, extra_variables=extra_variables,
                           keep_multi_blank_lines=False))
