#!/usr/bin/env python3

import os

# This must be done before conf imports, so we get the real conf instead of testing one.
from pylinkirc import world
world.testing = False

from pylinkirc import conf, classes, utils, coreplugin
from pylinkirc.log import log

if __name__ == '__main__':
    log.info('PyLink %s starting...', world.version)

    # Write a PID file.
    with open('%s.pid' % conf.confname, 'w') as f:
        f.write(str(os.getpid()))

    # Import plugins first globally, because they can listen for events
    # that happen before the connection phase.
    to_load = conf.conf['plugins']
    # Here, we override the module lookup and import the plugins
    # dynamically depending on which were configured.
    for plugin in to_load:
        try:
            world.plugins[plugin] = pl = utils.loadModuleFromFolder(plugin, world.plugins_folder)
        except (OSError, ImportError) as e:
            log.exception('Failed to load plugin %r: %s: %s', plugin, type(e).__name__, str(e))
        else:
            if hasattr(pl, 'main'):
                log.debug('Calling main() function of plugin %r', pl)
                pl.main()

    # Initialize all the networks one by one
    for network, sdata in conf.conf['servers'].items():

        protoname = sdata['protocol']

        # Fetch the correct protocol module
        proto = utils.getProtocolModule(protoname)
        world.networkobjects[network] = irc = classes.Irc(network, proto, conf.conf)

    world.started.set()
    log.info("Loaded plugins: %s", ', '.join(sorted(world.plugins.keys())))
