"""
Custom AdminSite for IGNY8 to organize models into proper groups using Unfold
"""
from django.contrib import admin
from django.contrib.admin.apps import AdminConfig
from django.apps import apps
from django.urls import path, reverse_lazy
from django.shortcuts import redirect
from unfold.admin import ModelAdmin as UnfoldModelAdmin
from unfold.sites import UnfoldAdminSite


class Igny8AdminSite(UnfoldAdminSite):
    """
    Custom AdminSite based on Unfold that organizes models into the planned groups
    """
    site_header = 'IGNY8 Administration'
    site_title = 'IGNY8 Admin'
    index_title = 'IGNY8 Administration'
    
    def get_urls(self):
        """Get admin URLs without custom dashboard"""
        urls = super().get_urls()
        return urls

    def get_app_list(self, request):
        """
        Customize the app list to organize models into logical groups
        """
        # Get the default app list
        app_dict = self._build_app_dict(request)
        
        # Define our custom groups with their models (using object_name)
        # Organized by business function with emoji icons for visual recognition
        custom_groups = {
            '💰 Billing & Accounts': {
                'models': [
                    ('igny8_core_auth', 'Plan'),
                    ('billing', 'PlanLimitUsage'),
                    ('igny8_core_auth', 'Account'),
                    ('igny8_core_auth', 'Subscription'),
                    ('billing', 'Invoice'),
                    ('billing', 'Payment'),
                    ('billing', 'CreditTransaction'),
                    ('billing', 'CreditUsageLog'),
                    ('billing', 'CreditPackage'),
                    ('billing', 'PaymentMethodConfig'),
                    ('billing', 'AccountPaymentMethod'),
                    ('billing', 'CreditCostConfig'),
                ],
            },
            '👥 Sites & Users': {
                'models': [
                    ('igny8_core_auth', 'Site'),
                    ('igny8_core_auth', 'Sector'),
                    ('igny8_core_auth', 'User'),
                    ('igny8_core_auth', 'SiteUserAccess'),
                    ('igny8_core_auth', 'PasswordResetToken'),
                ],
            },
            '📚 Content Management': {
                'models': [
                    ('writer', 'Content'),
                    ('writer', 'Tasks'),
                    ('writer', 'Images'),
                    ('writer', 'ContentTaxonomy'),
                    ('writer', 'ContentAttribute'),
                    ('writer', 'ContentTaxonomyRelation'),
                    ('writer', 'ContentClusterMap'),
                ],
            },
            '🎯 Planning & Strategy': {
                'models': [
                    ('planner', 'Clusters'),
                    ('planner', 'Keywords'),
                    ('planner', 'ContentIdeas'),
                    ('system', 'Strategy'),
                ],
            },
            '🔗 Integrations & Publishing': {
                'models': [
                    ('integration', 'SiteIntegration'),
                    ('integration', 'SyncEvent'),
                    ('publishing', 'PublishingRecord'),
                    ('publishing', 'DeploymentRecord'),
                ],
            },
            '🤖 AI & Automation': {
                'models': [
                    ('ai', 'AITaskLog'),
                    ('system', 'AIPrompt'),
                    ('automation', 'AutomationConfig'),
                    ('automation', 'AutomationRun'),
                    ('optimization', 'OptimizationTask'),
                ],
            },
            '🌍 Global Reference Data': {
                'models': [
                    ('igny8_core_auth', 'Industry'),
                    ('igny8_core_auth', 'IndustrySector'),
                    ('igny8_core_auth', 'SeedKeyword'),
                ],
            },
            '⚙️ System Configuration': {
                'models': [
                    ('system', 'IntegrationSettings'),
                    ('system', 'AuthorProfile'),
                    ('system', 'SystemSettings'),
                    ('system', 'AccountSettings'),
                    ('system', 'UserSettings'),
                    ('system', 'ModuleSettings'),
                    ('system', 'AISettings'),
                    ('system', 'ModuleEnableSettings'),
                    ('system', 'SystemLog'),
                    ('system', 'SystemStatus'),
                ],
            },
            '� Monitoring & Tasks': {
                'models': [
                    ('django_celery_results', 'TaskResult'),
                    ('django_celery_results', 'GroupResult'),
                ],
            },
            '�🔧 Django System': {
                'models': [
                    ('admin', 'LogEntry'),
                    ('auth', 'Group'),
                    ('auth', 'Permission'),
                    ('contenttypes', 'ContentType'),
                    ('sessions', 'Session'),
                ],
            },
        }
        
        # Build the custom app list
        app_list = []
        
        for group_name, group_config in custom_groups.items():
            group_models = []
            
            for app_label, model_name in group_config['models']:
                # Find the model in app_dict
                if app_label in app_dict:
                    app_data = app_dict[app_label]
                    # Look for the model in the app's models
                    for model in app_data.get('models', []):
                        if model['object_name'] == model_name:
                            group_models.append(model)
                            break
            
            # Only add the group if it has models
            if group_models:
                app_list.append({
                    'name': group_name,
                    'app_label': group_name.lower().replace(' ', '_').replace('&', '').replace('emoji', ''),
                    'app_url': None,
                    'has_module_perms': True,
                    'models': group_models,
                })
        
        # Sort the app list by our custom order
        order = [
            '💰 Billing & Accounts',
            '👥 Sites & Users',
            '📚 Content Management',
            '🎯 Planning & Strategy',
            '🔗 Integrations & Publishing',
            '🤖 AI & Automation',
            '🌍 Global Reference Data',
            '⚙️ System Configuration',
            '🔧 Django System',
        ]
        
        app_list.sort(key=lambda x: order.index(x['name']) if x['name'] in order else 999)
        
        return app_list



