from django.core.urlresolvers import reverse
from fluent_dashboard import dashboard
from fluent_dashboard.modules import CmsAppIconList

from orchestra.core import services


class OrchestraIndexDashboard(dashboard.FluentIndexDashboard):
    _registry = {}
    
    @classmethod
    def register_link(cls, module, view_name, title):
        registered = cls._registry.get(module, [])
        registered.append((view_name, title))
        cls._registry[module] = registered
    
    def get_application_modules(self):
        modules = super(OrchestraIndexDashboard, self).get_application_modules()
        models = []
        for model, options in services.get().items():
            if options.get('menu', True):
                models.append("%s.%s" % (model.__module__, model._meta.object_name))
        
        for module in modules:
            registered = self._registry.get(module.title, None)
            if registered:
                for view_name, title in registered:
                    # This values are shit, but it is how fluent dashboard will look for the icon
                    app_name, name = view_name.split('_')[:-1]
                    url = reverse('admin:' + view_name)
                    add_url = '/'.join(url.split('/')[:-2])
                    module.children.append({
                        'models': [{
                            'add_url': add_url,
                            'app_name': app_name,
                            'change_url': url,
                            'name': name,
                            'title': title }],
                       'name': app_name,
                       'title': title,
                       'url': add_url,
                    })
        service_icon_list = CmsAppIconList('Services', models=models, collapsible=True)
        modules.append(service_icon_list)
        return modules