from django.contrib import admin 
from apps.core.models import BaseModel, Language

# Register your models here.

 
 
# Register the Language model with the admin site. 
@admin.register(Language)
class LanguageAdmin(admin.ModelAdmin):
    """
    Customizes the appearance and functionality of the Language model in the Django admin interface.
    """

    list_display = ("name", "code", "description")  # Fields displayed in the list view
    search_fields = ("name", "code")  # Enables searching by name or code
    list_filter = ("name", "code")     # Adds filters on the right side of the list view
    list_per_page = 20  # Number of items to display per page

    # Define actions that can be performed on selected items in the admin
    actions = ['make_selected_uppercase']

    def make_selected_uppercase(self, request, queryset):
        """
        Custom action to convert the selected languages' names to uppercase.
        """
        updated_count = 0
        for language in queryset: 
            language.code = language.code.upper()
            language.save()
            updated_count += 1

        self.message_user(request, f'{updated_count} languages successfully updated.')

    make_selected_uppercase.short_description = "Convert selected names to UPPERCASE"

    # Define fieldsets to group fields in the detail view
    fieldsets = (
        (None, {
            'fields': ('name', 'code',)
        }),
        ('Description', {
            'fields': ('description',),
            'classes': ('collapse',)  # Collapsible section
        }),
    )

    # Prepopulate the 'code' field based on the 'name' field
    prepopulated_fields = {'code': ('name',)}