# For Django applications.
import logging

from django.apps import AppConfig
from django.conf import settings
from django.utils.module_loading import import_string

from optimize_later import config

log = logging.getLogger(__name__.rpartition('.')[0] or __name__)

django_callbacks = []


class OptimizeLaterConfig(AppConfig):
    name = 'optimize_later'
    verbose_name = 'Optimize Later'

    def ready(self):
        initialize_django_callbacks()


def django_callback(result):
    for callback in django_callbacks:
        try:
            callback(result)
        except Exception:
            log.exception('Failed to invoke Django callback: %r', callback)


def initialize_django_callbacks():
    global django_callbacks
    django_callbacks = []
    for callback in getattr(settings, 'OPTIMIZE_LATER_CALLBACKS', None) or []:
        django_callbacks.append(import_string(callback))

config.register_callback(django_callback)