from distribution import app
from distribution.adapters import models, utils


def register(adapter_definitions, default=None):
    """
    Registers new adapter instances out of a configuration dictionary.
    See utils.create_adapters() for details.

    :param adapter_definitions: (dict) a dictionary-like object mapping
    new instance names (keys) with a dictionary of options.

    :param default: the default class to instantiate adapters
    from, when none was specified among the options.

    """
    new_adapters = utils.create_adapters(adapter_definitions, default)
    globals().update(new_adapters)
    registered_adapters.extend(new_adapters.values())
    app.logger.debug("The following extra adapters had been registered: {}"
                     .format(new_adapters.keys()))


def run_pre_renders(items):
    for adapter in registered_adapters:
        adapter.pre_render(items)


def run_delete(keys):
    for adapter in registered_adapters:
        adapter.delete(keys)


registered_adapters = []
# Autoregister:
extra_adapters = app.config.get('EXTRA_ADAPTERS', {})
if extra_adapters:
    register(extra_adapters, app.config["DEFAULT_ADAPTER_MODEL"])

# These go last to prevent overrides
# XML endpoints:
# --------------
rss = models.RSSOutputAdapter()
rss_simple = models.RSSOutputAdapter(context={
    "style": "simple"
})
sitemap_index = models.SiteMapIndexAdapter()
sitemap_page = models.SiteMapAdapter()
sitemap_news = models.SiteMapAdapter(template_name="sitemap_news.xml")

# JSON endpoints
# --------------
# Ad-hoc serializer, no template
json = models.JSONOutputAdapter()
# Templated, custom
jsonapi = models.JSONAPIOutputAdapter()

# AMP adapter
amp = models.AMPAdapter()

registered_adapters.extend([rss, rss_simple, json, jsonapi, amp, sitemap_index, sitemap_page, sitemap_news])
