"""
Admin configuration for Products app
"""
from django.contrib import admin
from .models import Category, Product, ProductImage, ProductVariation, Review, Brand


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    """Category Admin"""
    
    list_display = ('name', 'parent', 'product_count', 'is_active', 'created_at')
    list_filter = ('is_active', 'parent')
    search_fields = ('name', 'description')
    prepopulated_fields = {'slug': ('name',)}
    ordering = ('name',)


class ProductImageInline(admin.TabularInline):
    """Inline for product images"""
    model = ProductImage
    extra = 1
    fields = ('image', 'alt_text', 'order')


class ProductVariationInline(admin.TabularInline):
    """Inline for product variations"""
    model = ProductVariation
    extra = 1
    fields = (
        'name', 'value', 'price_adjustment', 'stock',
        'length', 'width', 'height', 'dimension_unit',
        'quantity_value', 'quantity_unit',
        'is_active'
    )


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    """Product Admin"""
    
    list_display = (
        'name', 'sku', 'category', 'brand_ref', 'price', 'stock',
        'is_active', 'is_featured', 'created_at'
    )
    list_filter = (
        'is_active', 'is_featured', 'is_new_arrival',
        'is_best_seller', 'category', 'brand_ref', 'created_at'
    )
    search_fields = ('name', 'sku', 'description', 'brand', 'brand_ref__name')
    prepopulated_fields = {'slug': ('name',)}
    readonly_fields = ('views_count', 'sales_count', 'created_at', 'updated_at')
    
    fieldsets = (
        ('Basic Information', {
            'fields': ('name', 'slug', 'sku', 'category', 'brand_ref', 'vendor')
        }),
        ('Description', {
            'fields': ('short_description', 'description', 'details')
        }),
        ('Pricing', {
            'fields': ('price', 'compare_price', 'cost_price')
        }),
        ('Inventory', {
            'fields': ('stock', 'low_stock_threshold', 'track_inventory')
        }),
        ('Images', {
            'fields': ('featured_image',)
        }),
        ('Status', {
            'fields': (
                'is_active', 'is_featured', 'is_new_arrival', 'is_best_seller'
            )
        }),
        ('SEO', {
            'fields': ('meta_title', 'meta_description', 'meta_keywords'),
            'classes': ('collapse',)
        }),
        ('Statistics', {
            'fields': ('views_count', 'sales_count', 'created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )
    
    inlines = [ProductImageInline, ProductVariationInline]
    
    actions = ['mark_as_featured', 'mark_as_active', 'mark_as_inactive']
    
    def mark_as_featured(self, request, queryset):
        updated = queryset.update(is_featured=True)
        self.message_user(request, f'{updated} products marked as featured.')
    mark_as_featured.short_description = "Mark selected as featured"
    
    def mark_as_active(self, request, queryset):
        updated = queryset.update(is_active=True)
        self.message_user(request, f'{updated} products activated.')
    mark_as_active.short_description = "Activate selected products"
    
    def mark_as_inactive(self, request, queryset):
        updated = queryset.update(is_active=False)
        self.message_user(request, f'{updated} products deactivated.')
    mark_as_inactive.short_description = "Deactivate selected products"


@admin.register(ProductImage)
class ProductImageAdmin(admin.ModelAdmin):
    """Product Image Admin"""
    
    list_display = ('product', 'image', 'order', 'created_at')
    list_filter = ('created_at',)
    search_fields = ('product__name', 'alt_text')
    ordering = ('product', 'order')


@admin.register(ProductVariation)
class ProductVariationAdmin(admin.ModelAdmin):
    """Product Variation Admin"""
    
    list_display = (
        'product', 'name', 'value', 'price_adjustment',
        'stock', 'quantity_value', 'quantity_unit',
        'dimension_unit', 'is_active'
    )
    list_filter = ('is_active', 'name')
    search_fields = ('product__name', 'value')


@admin.register(Review)
class ReviewAdmin(admin.ModelAdmin):
    """Review Admin"""
    
    list_display = (
        'product', 'user', 'rating', 'is_approved',
        'is_verified_purchase', 'created_at'
    )
    list_filter = (
        'rating', 'is_approved', 'is_verified_purchase', 'created_at'
    )
    search_fields = ('product__name', 'user__email', 'comment')
    readonly_fields = ('created_at', 'updated_at')
    
    actions = ['approve_reviews', 'mark_as_verified']
    
    def approve_reviews(self, request, queryset):
        updated = queryset.update(is_approved=True)
        self.message_user(request, f'{updated} reviews approved.')
    approve_reviews.short_description = "Approve selected reviews"
    
    def mark_as_verified(self, request, queryset):
        updated = queryset.update(is_verified_purchase=True)
        self.message_user(request, f'{updated} reviews marked as verified purchase.')
    mark_as_verified.short_description = "Mark as verified purchase"


@admin.register(Brand)
class BrandAdmin(admin.ModelAdmin):
    """Brand Admin"""
    list_display = ('name', 'slug', 'is_active', 'created_at')
    list_filter = ('is_active',)
    search_fields = ('name', 'description')
    prepopulated_fields = {'slug': ('name',)}
    ordering = ('name',)
