from django.contrib import admin
from .models import Feedback, FeedbackCategory, FeedbackTag, FeedbackConfiguration

@admin.register(FeedbackCategory)
class FeedbackCategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'description', 'is_active', 'created_at')
    list_filter = ('is_active',)
    search_fields = ('name', 'description')

@admin.register(FeedbackTag)
class FeedbackTagAdmin(admin.ModelAdmin):
    list_display = ('name', 'count', 'created_at')
    list_filter = ('created_at',)
    search_fields = ('name',)
    readonly_fields = ('count',)

@admin.register(FeedbackConfiguration)
class FeedbackConfigurationAdmin(admin.ModelAdmin):
    list_display = ('__str__', 'event_selection_mode', 'feedback_enabled', 'auto_enable_events', 'created_at')
    list_filter = ('feedback_enabled', 'event_selection_mode', 'auto_enable_events', 'created_at')
    search_fields = ('active_event__name',)
    readonly_fields = ('created_at', 'updated_at')
    filter_horizontal = ('active_events',)
    fieldsets = (
        ('Event Configuration', {
            'fields': ('event_selection_mode', 'active_event', 'active_events', 'feedback_enabled', 'auto_enable_events')
        }),
        ('Messages', {
            'fields': ('welcome_message', 'thank_you_message', 'disabled_message')
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )

@admin.register(Feedback)
class FeedbackAdmin(admin.ModelAdmin):
    list_display = ('get_user_display', 'category', 'rating', 'get_event_display', 'is_anonymous', 'is_published', 'created_at')
    list_filter = ('rating', 'category', 'is_anonymous', 'is_published', 'created_at', 'event', 'event_name')
    search_fields = ('comment', 'name', 'email', 'registration_code', 'registered_user__full_name', 'registered_user__email', 'event__name', 'event_name')
    readonly_fields = ('created_at', 'ip_address')
    filter_horizontal = ('tags',)
    fieldsets = (
        ('User Information', {
            'fields': ('registered_user', 'name', 'email', 'registration_code', 'is_anonymous')
        }),
        ('Event Information', {
            'fields': ('event', 'event_name')
        }),
        ('Feedback Content', {
            'fields': ('category', 'rating', 'comment', 'tags')
        }),
        ('Metadata', {
            'fields': ('ip_address', 'created_at', 'is_published')
        }),
    )
    
    def get_user_display(self, obj):
        if obj.registered_user:
            return obj.registered_user.full_name
        elif obj.name:
            return obj.name
        else:
            return 'Anonymous'
    get_user_display.short_description = 'User'
    
    def get_event_display(self, obj):
        if obj.event:
            return obj.event.name
        elif obj.event_name:
            return obj.event_name
        else:
            return 'No Event'
    get_event_display.short_description = 'Event'
    
    def save_model(self, request, obj, form, change):
        # Process tags from comment
        super().save_model(request, obj, form, change)
        
        # After saving, extract potential tags from the comment
        if obj.comment:
            words = obj.comment.lower().split()
            # Filter out common words, keep only words with 4+ characters
            potential_tags = [word for word in words if len(word) >= 4 and word.isalpha()]
            
            for tag_name in potential_tags:
                tag, created = FeedbackTag.objects.get_or_create(name=tag_name)
                if not created:
                    tag.count += 1
                    tag.save()
                obj.tags.add(tag)
