from django.contrib import admin
from .models import Category, NewsletterSubscriber, Product, Slide, Order, Testimonial, Blog, OrderItem, Profile


@admin.register(NewsletterSubscriber)
class NewsletterSubscriberAdmin(admin.ModelAdmin):
    list_display = ['email', 'subscribed_at']
    search_fields = ['email']


@admin.register(Testimonial)
class TestimonialAdmin(admin.ModelAdmin):
    list_display = ('user', 'message', 'rating', 'approved', 'created_at')
    list_filter = ('rating', 'approved', 'created_at')
    search_fields = ('user__username', 'message')
    actions = ['approve_testimonials']

    def approve_testimonials(self, request, queryset):
        queryset.update(approved=True)
        self.message_user(request, "Selected testimonials have been approved.")
    approve_testimonials.short_description = "Approve selected testimonials"


@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    list_display = ('title', 'created_at')
    search_fields = ('title', 'content')


@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
    list_display = ('user', 'image_preview')  # Display user & profile picture
    # Search by username & email
    search_fields = ('user__username', 'user__email')
    list_filter = ('user__is_active',)  # Filter by active users
    readonly_fields = ('image_preview',)

    def image_preview(self, obj):
        """Show profile image preview in the admin panel."""
        if obj.image:
            return f'<img src="{obj.image.url}" width="50" height="50" style="border-radius:50%;"/>'
        return "No Image"
    image_preview.allow_tags = True
    image_preview.short_description = "Profile Picture"

# Inline view for OrderItems in OrderAdmin


class OrderItemInline(admin.TabularInline):
    model = OrderItem
    extra = 0  # Don't add empty extra rows


@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = ('id', 'user', 'full_name', 'total_price',
                    'payment_method', 'status', 'created_at')
    list_filter = ('status', 'created_at', 'payment_method')
    search_fields = ('full_name', 'phone', 'address')
    inlines = [OrderItemInline]


@admin.register(OrderItem)
class OrderItemAdmin(admin.ModelAdmin):
    list_display = ('order', 'product', 'quantity', 'price')
    search_fields = ('product__name', 'order__full_name')


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name',)


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'category', 'price', 'qr_code')


@admin.register(Slide)
class SlideAdmin(admin.ModelAdmin):
    list_display = ('name', 'description')
