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


@admin.register(FeedbackEvent)
class FeedbackEventAdmin(admin.ModelAdmin):
    list_display = ['name', 'is_active', 'is_archived', 'feedback_count', 'created_at']
    list_filter = ['is_active', 'is_archived']
    search_fields = ['name']
    readonly_fields = ['archived_at', 'created_at', 'updated_at']
    actions = ['archive_events', 'set_as_active_feedback_event']

    def feedback_count(self, obj):
        return obj.feedbacks.count()
    feedback_count.short_description = 'Submissions'

    def archive_events(self, request, queryset):
        for event in queryset:
            event.archive()
        self.message_user(request, f'{queryset.count()} event(s) archived.')
    archive_events.short_description = 'Archive selected feedback events'

    def set_as_active_feedback_event(self, request, queryset):
        if queryset.count() != 1:
            self.message_user(request, 'Please select exactly one event.', level='error')
            return
        event = queryset.first()
        config = FeedbackConfiguration.get_config()
        config.active_event = event
        config.feedback_enabled = True
        config.save()
        self.message_user(request, f'"{event.name}" is now the active feedback event.')
    set_as_active_feedback_event.short_description = 'Set as active feedback event'


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


@admin.register(Feedback)
class FeedbackAdmin(admin.ModelAdmin):
    list_display = ['__str__', 'feedback_event', 'category', 'rating', 'is_anonymous', 'is_published', 'created_at']
    list_filter = ['feedback_event', 'category', 'rating', 'is_anonymous', 'is_published']
    search_fields = ['name', 'email', 'registration_code', 'comment']
    readonly_fields = ['ip_address', 'created_at']
    date_hierarchy = 'created_at'


@admin.register(FeedbackConfiguration)
class FeedbackConfigurationAdmin(admin.ModelAdmin):
    list_display = ['active_event', 'feedback_enabled', 'updated_at']

    def has_add_permission(self, request):
        return not FeedbackConfiguration.objects.exists()

    def has_delete_permission(self, request, obj=None):
        return False
