import logging

from lakesuperior.messaging import formatters, handlers

logger = logging.getLogger(__name__)
messenger = logging.getLogger('_messenger')


class Messenger:
    """
    Very simple message sender using the standard Python logging facility.
    """
    def __init__(self, config):
        """
        Set up the messenger.

        :param dict config: Messenger configuration.
        """
        def msg_routes():
            for route in config['routes']:
                handler_cls = getattr(handlers, route['handler'])
                messenger.addHandler(handler_cls(route))
                messenger.setLevel(logging.INFO)
                formatter = getattr(formatters, route['formatter'])

                yield messenger, formatter

        self.config = config
        self.msg_routes = tuple(r for r in msg_routes())
        logger.info('Active messaging routes: {}'.format(self.msg_routes))


    def send(self, *args, **kwargs):
        """Send one or more external messages."""
        for msg, fn in self.msg_routes:
            msg.info(fn(*args, **kwargs))