from django.contrib import admin
from django import forms
from django.core.exceptions import ValidationError
from .models import Category, Publication

class PublicationAdminForm(forms.ModelForm):
    class Meta:
        model = Publication
        fields = '__all__'

    def clean_document(self):
        document = self.cleaned_data.get('document')
        if document:
            # Get file extension
            file_ext = document.name.split('.')[-1].lower()
            # Define allowed extensions
            allowed_extensions = ['pdf', 'doc', 'docx']
            
            if file_ext not in allowed_extensions:
                raise ValidationError(
                    f'Invalid file type. Allowed file types are: {", ".join(allowed_extensions).upper()}'
                )
        return document

@admin.action(description='Archive selected publications')
def make_archived(modeladmin, request, queryset):
    queryset.update(status='archived')

@admin.action(description='Unarchive selected publications')
def make_active(modeladmin, request, queryset):
    queryset.update(status='active')

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'description', 'created_at')
    prepopulated_fields = {'slug': ('name',)}
    search_fields = ('name', 'description')

@admin.register(Publication)
class PublicationAdmin(admin.ModelAdmin):
    form = PublicationAdminForm
    list_display = ('title', 'category', 'status', 'published_date', 'download_count', 'file_size')
    list_filter = ('status', 'category', 'published_date')
    search_fields = ('title', 'description')
    prepopulated_fields = {'slug': ('title',)}
    date_hierarchy = 'published_date'
    ordering = ('-published_date',)
    actions = [make_archived, make_active]