from django.contrib import admin
from django.utils.html import format_html
from .models import Group, GroupMember


class GroupMemberInline(admin.TabularInline):
    """Inline to show members directly in Group admin."""
    model = GroupMember
    extra = 0
    readonly_fields = ['joined_at']
    autocomplete_fields = ['user']

    def get_queryset(self, request):
        return super().get_queryset(request).select_related('user')


@admin.register(Group)
class GroupAdmin(admin.ModelAdmin):
    list_display = ['name', 'created_by_display', 'member_count', 'post_count', 'created_at', 'status_badge']
    list_filter = ['is_deleted', 'created_at']
    search_fields = ['name', 'description', 'created_by__username', 'created_by__email']
    readonly_fields = ['id', 'created_at', 'member_count', 'post_count']
    autocomplete_fields = ['created_by']
    date_hierarchy = 'created_at'
    inlines = [GroupMemberInline]

    fieldsets = (
        ('Group Info', {
            'fields': ('id', 'name', 'description', 'image')
        }),
        ('Creator & Status', {
            'fields': ('created_by', 'created_at', 'is_deleted')
        }),
        ('Statistics', {
            'fields': ('member_count', 'post_count'),
            'classes': ('collapse',)
        }),
    )

    def created_by_display(self, obj):
        return f"{obj.created_by.username}"
    created_by_display.short_description = 'Created By'
    created_by_display.admin_order_field = 'created_by__username'

    def member_count(self, obj):
        count = obj.members.filter(is_active=True).count()
        return format_html('<strong>{}</strong> members', count)
    member_count.short_description = 'Members'

    def post_count(self, obj):
        count = obj.group_posts.filter(is_active=True).count()
        return format_html('<strong>{}</strong> posts', count)
    post_count.short_description = 'Posts'

    def status_badge(self, obj):
        if obj.is_deleted:
            return format_html('<span style="color: red; font-weight: bold;">🗑️ Deleted</span>')
        return format_html('<span style="color: green; font-weight: bold;">✅ Active</span>')
    status_badge.short_description = 'Status'


@admin.register(GroupMember)
class GroupMemberAdmin(admin.ModelAdmin):
    list_display = ['user_display', 'group', 'role_badge', 'joined_at', 'status_badge']
    list_filter = ['role', 'is_active', 'joined_at']
    search_fields = ['user__username', 'user__email', 'group__name']
    readonly_fields = ['joined_at']
    autocomplete_fields = ['user', 'group']
    date_hierarchy = 'joined_at'
    list_select_related = ['user', 'group']

    fieldsets = (
        ('Membership', {
            'fields': ('user', 'group', 'role')
        }),
        ('Status', {
            'fields': ('is_active', 'joined_at')
        }),
    )

    def user_display(self, obj):
        return f"{obj.user.username}"
    user_display.short_description = 'User'
    user_display.admin_order_field = 'user__username'

    def role_badge(self, obj):
        colors = {
            'ADMIN': '#dc3545',      # Red
            'MODERATOR': '#fd7e14',  # Orange
            'MEMBER': '#28a745',     # Green
        }
        icons = {
            'ADMIN': '👑',
            'MODERATOR': '🛡️',
            'MEMBER': '👤',
        }
        color = colors.get(obj.role, '#6c757d')
        icon = icons.get(obj.role, '')
        return format_html(
            '<span style="background-color: {}; color: white; padding: 3px 8px; border-radius: 3px;">{} {}</span>',
            color, icon, obj.role
        )
    role_badge.short_description = 'Role'
    role_badge.admin_order_field = 'role'

    def status_badge(self, obj):
        if obj.is_active:
            return format_html('<span style="color: green;">✅ Active</span>')
        return format_html('<span style="color: red;">❌ Inactive</span>')
    status_badge.short_description = 'Status'
