from django.contrib import admin
from django.utils.html import format_html
from import_export.admin import ImportExportModelAdmin

from .models import (
    News, 
    NewsImage, 
    GalleryImage, 
    Vacancy, 
    StaffMember, 
    Testimonial
)

@admin.register(News)
class NewsAdmin(ImportExportModelAdmin):
    list_display = (
        'title', 
        'display_title_image', 
        'published_date', 
        'is_published', 
        'get_image_count'
    )
    list_filter = (
        'is_published', 
        'published_date'
    )
    search_fields = ('title', 'content')
    prepopulated_fields = {'slug': ('title',)}
    readonly_fields = ('display_title_image_preview',)

    def display_title_image(self, obj):
        if obj.title_image:
            return format_html(
                '<img src="{}" style="width: 100px; height: 70px; object-fit: cover;" />',
                obj.title_image.url
            )
        return 'No Image'
    display_title_image.short_description = 'Title Image'

    def display_title_image_preview(self, obj):
        if obj.title_image:
            return format_html(
                '<img src="{}" style="max-width: 300px; max-height: 300px;" />',
                obj.title_image.url
            )
        return 'No Image'
    display_title_image_preview.short_description = 'Image Preview'

    def get_image_count(self, obj):
        return obj.images.count()
    get_image_count.short_description = 'Additional Images'

class NewsImageInline(admin.TabularInline):
    model = NewsImage
    extra = 3
    readonly_fields = ('display_image',)

    def display_image(self, obj):
        if obj.image:
            return format_html(
                '<img src="{}" style="max-width: 150px; max-height: 150px;" />',
                obj.image.url
            )
        return 'No Image'

@admin.register(NewsImage)
class NewsImageAdmin(admin.ModelAdmin):
    list_display = ('news', 'display_image', 'caption')
    
    def display_image(self, obj):
        if obj.image:
            return format_html(
                '<img src="{}" style="width: 100px; height: 70px; object-fit: cover;" />',
                obj.image.url
            )
        return 'No Image'
    display_image.short_description = 'Image'

@admin.register(GalleryImage)
class GalleryImageAdmin(admin.ModelAdmin):
    list_display = ('display_image', 'uploaded_at', 'is_featured')
    list_filter = ('uploaded_at', 'is_featured')
    
    def display_image(self, obj):
        if obj.image:
            return format_html(
                '<img src="{}" style="width: 100px; height: 70px; object-fit: cover;" />',
                obj.image.url
            )
        return 'No Image'
    display_image.short_description = 'Image'

@admin.register(Vacancy)
class VacancyAdmin(ImportExportModelAdmin):
    list_display = (
        'job_title', 
        'application_deadline', 
        'is_active', 
        'created_at'
    )
    list_filter = (
        'is_active', 
        'application_deadline'
    )
    search_fields = ('job_title', 'description')
    
    def get_queryset(self, request):
        # Show only active vacancies by default
        return super().get_queryset(request).filter(is_active=True)

@admin.register(StaffMember)
class StaffMemberAdmin(admin.ModelAdmin):
    list_display = (
        'name', 
        'position', 
        'display_profile_picture', 
        'gender'
    )
    list_filter = ('gender', 'position')
    search_fields = ('name', 'position')
    
    def display_profile_picture(self, obj):
        if obj.profile_picture:
            return format_html(
                '<img src="{}" style="width: 100px; height: 100px; border-radius: 50%; object-fit: cover;" />',
                obj.profile_picture.url
            )
        return 'No Image'
    display_profile_picture.short_description = 'Profile Picture'

@admin.register(Testimonial)
class TestimonialAdmin(ImportExportModelAdmin):
    list_display = (
        'get_truncated_testimony', 
        'role', 
        'date', 
        'is_featured'
    )
    list_filter = (
        'role', 
        'is_featured', 
        'date'
    )
    
    def get_truncated_testimony(self, obj):
        return f"{obj.testimony[:50]}..." if len(obj.testimony) > 50 else obj.testimony
    get_truncated_testimony.short_description = 'Testimony'

# Customize the admin site
admin.site.site_header = 'Blessed Assurance Montessori School Admin'
admin.site.site_title = 'School Administration'
admin.site.index_title = 'Welcome to School Management Portal'