from django.contrib import admin
from django.urls import path
from .views import admin_dashboard

class CustomAdminSite(admin.AdminSite):
    def get_app_list(self, request, app_label=None):
        """
        Return a sorted list of all the installed apps that have been
        registered in this site.
        """
        app_list = super().get_app_list(request, app_label)

        # Filter out admin_interface app from the list
        app_list = [app for app in app_list if app['app_label'] != 'admin_interface']

        # Only add the dashboard app if we're not filtering by app_label
        if app_label is None:
            custom_app = {
                'name': 'Dashboard',
                'app_label': 'dashboard',
                'models': [{
                    'name': 'Dashboard',
                    'object_name': 'Dashboard',
                    'admin_url': '/dashboard/',
                    'view_only': True,
                }]
            }
            app_list.insert(0, custom_app)

        return app_list

    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('dashboard/', self.admin_view(admin_dashboard), name='admin_dashboard'),
        ]
        return custom_urls + urls

# Create an instance of the custom admin site
admin_site = CustomAdminSite(name='customadmin')

# Optional: Copy registrations from default admin site
def copy_registry(admin_site):
    from django.contrib.admin.sites import site as default_admin_site
    for model, admin_class in default_admin_site._registry.items():
        if model not in admin_site._registry:
            admin_site.register(model, type(admin_class))

copy_registry(admin_site)
