"""
Module Registry Admin - Django admin configuration for modules and features.
"""
from django.contrib import admin
from django.utils.html import format_html
from django.utils import timezone

from .models import Module, TenantModule, Feature, TenantFeatureOverride


class FeatureInline(admin.TabularInline):
    """Inline admin for module features."""
    model = Feature
    extra = 0
    fields = ['name', 'display_name', 'is_enabled', 'minimum_license', 'rollout_percentage']


class TenantFeatureOverrideInline(admin.TabularInline):
    """Inline admin for tenant feature overrides."""
    model = TenantFeatureOverride
    extra = 0
    fields = ['tenant_id', 'is_enabled', 'reason', 'expires_at']
    readonly_fields = ['created_at']


@admin.register(Module)
class ModuleAdmin(admin.ModelAdmin):
    """Admin configuration for Module."""
    
    list_display = [
        'name',
        'display_name',
        'code',
        'is_core',
        'version',
        'status_badge',
        'module_category',
        'category',
        'features_count',
        'tenants_count',
        'created_at',
    ]
    list_filter = ['status', 'module_category', 'category', 'is_core']
    search_fields = ['name', 'display_name', 'description']
    readonly_fields = ['created_at', 'updated_at']
    
    fieldsets = (
        (None, {
            'fields': ('name', 'display_name', 'code', 'is_core', 'description', 'version')
        }),
        ('Status', {
            'fields': ('status', 'module_category', 'category', 'tags')
        }),
        ('UI', {
            'fields': ('icon', 'color'),
            'classes': ('collapse',)
        }),
        ('API', {
            'fields': ('api_prefix', 'supported_api_versions'),
            'classes': ('collapse',)
        }),
        ('Events', {
            'fields': ('published_events', 'consumed_events'),
            'classes': ('collapse',)
        }),
        ('Settings', {
            'fields': ('default_settings',),
            'classes': ('collapse',)
        }),
        ('Manifest', {
            'fields': ('manifest',),
            'classes': ('collapse',)
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    inlines = [FeatureInline]
    
    def status_badge(self, obj):
        """Display status as colored badge."""
        colors = {
            'active': 'green',
            'beta': 'orange',
            'deprecated': 'red',
            'development': 'blue',
        }
        color = colors.get(obj.status, 'gray')
        return format_html(
            '<span style="padding: 3px 8px; border-radius: 3px; '
            'background-color: {}; color: white;">{}</span>',
            color,
            obj.get_status_display()
        )
    status_badge.short_description = 'Status'
    status_badge.admin_order_field = 'status'
    
    def features_count(self, obj):
        """Display count of features."""
        return obj.features.count()
    features_count.short_description = 'Features'
    
    def tenants_count(self, obj):
        """Display count of tenants using this module."""
        return TenantModule.objects.filter(module=obj, is_enabled=True).count()
    tenants_count.short_description = 'Active Tenants'


@admin.register(TenantModule)
class TenantModuleAdmin(admin.ModelAdmin):
    """Admin configuration for TenantModule."""
    
    list_display = [
        'tenant_id',
        'module',
        'is_enabled',
        'license_type',
        'status_badge',
        'days_remaining_display',
        'created_at',
    ]
    list_filter = ['is_enabled', 'license_type', 'module']
    search_fields = ['tenant_id', 'module__name']
    autocomplete_fields = ['module']
    readonly_fields = ['created_at', 'updated_at']
    
    fieldsets = (
        (None, {
            'fields': ('tenant_id', 'module', 'is_enabled')
        }),
        ('License', {
            'fields': ('license_type', 'expires_at')
        }),
        ('Features', {
            'fields': ('enabled_features',)
        }),
        ('Settings', {
            'fields': ('settings',),
            'classes': ('collapse',)
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    def status_badge(self, obj):
        """Display active status as badge."""
        is_active = obj.is_active()
        color = 'green' if is_active else 'red'
        text = 'Active' if is_active else 'Inactive'
        return format_html(
            '<span style="padding: 3px 8px; border-radius: 3px; '
            'background-color: {}; color: white;">{}</span>',
            color,
            text
        )
    status_badge.short_description = 'Status'
    
    def days_remaining_display(self, obj):
        """Display days remaining on license."""
        days = obj.days_remaining()
        if days is None:
            return 'Unlimited'
        if days < 0:
            return format_html('<span style="color: red;">Expired</span>')
        if days <= 7:
            return format_html('<span style="color: orange;">{} days</span>', days)
        return f'{days} days'
    days_remaining_display.short_description = 'Days Remaining'


@admin.register(Feature)
class FeatureAdmin(admin.ModelAdmin):
    """Admin configuration for Feature."""
    
    list_display = [
        'name',
        'display_name',
        'module',
        'is_enabled',
        'minimum_license',
        'rollout_percentage',
    ]
    list_filter = ['is_enabled', 'minimum_license', 'module']
    search_fields = ['name', 'display_name', 'description']
    autocomplete_fields = ['module']
    
    inlines = [TenantFeatureOverrideInline]


@admin.register(TenantFeatureOverride)
class TenantFeatureOverrideAdmin(admin.ModelAdmin):
    """Admin configuration for TenantFeatureOverride."""
    
    list_display = [
        'tenant_id',
        'feature',
        'is_enabled',
        'reason',
        'expires_at',
        'created_at',
    ]
    list_filter = ['is_enabled', 'feature__module']
    search_fields = ['tenant_id', 'feature__name', 'reason']
    autocomplete_fields = ['feature']
    readonly_fields = ['created_at']
