from django.contrib import admin
from .models import Property, PropertyImage, PropertyCategory, Location, PropertyAmenity, PropertyAmenityLink


class PropertyImageInline(admin.TabularInline):
    model = PropertyImage
    extra = 3
    fields = ('image', 'caption', 'order')


class PropertyAmenityInline(admin.TabularInline):
    model = PropertyAmenityLink
    extra = 1


@admin.register(Property)
class PropertyAdmin(admin.ModelAdmin):
    list_display = ('title', 'category', 'location', 'listing_type', 'price', 'status', 'is_featured', 'is_published', 'views_count')
    list_filter = ('listing_type', 'status', 'is_featured', 'is_published', 'category', 'location')
    search_fields = ('title', 'description', 'address')
    list_editable = ('is_featured', 'is_published', 'status')
    prepopulated_fields = {'slug': ('title',)}
    inlines = [PropertyImageInline, PropertyAmenityInline]
    readonly_fields = ('views_count', 'inquiries_count', 'created_at', 'updated_at')
    fieldsets = (
        ('Basic', {'fields': ('title', 'slug', 'category', 'listing_type', 'status')}),
        ('Location', {'fields': ('location', 'address', 'latitude', 'longitude')}),
        ('Pricing', {'fields': ('price', 'price_period', 'is_negotiable')}),
        ('Specifications', {'fields': ('bedrooms', 'bathrooms', 'toilets', 'parking_spaces', 'area_sqm', 'plot_size', 'year_built', 'title_documents')}),
        ('Content', {'fields': ('short_description', 'description', 'features')}),
        ('Media', {'fields': ('main_image', 'video_url', 'floor_plan')}),
        ('Visibility', {'fields': ('is_featured', 'is_verified', 'is_published')}),
        ('SEO', {'fields': ('meta_title', 'meta_description'), 'classes': ('collapse',)}),
        ('Stats', {'fields': ('views_count', 'inquiries_count', 'created_at', 'updated_at'), 'classes': ('collapse',)}),
    )

    def save_model(self, request, obj, form, change):
        if not obj.created_by_id:
            obj.created_by = request.user
        super().save_model(request, obj, form, change)


@admin.register(PropertyCategory)
class PropertyCategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'slug', 'order')
    prepopulated_fields = {'slug': ('name',)}
    list_editable = ('order',)


@admin.register(Location)
class LocationAdmin(admin.ModelAdmin):
    list_display = ('name', 'state', 'is_featured')
    list_filter = ('state', 'is_featured')
    search_fields = ('name', 'state')
    prepopulated_fields = {'slug': ('name',)}


@admin.register(PropertyAmenity)
class PropertyAmenityAdmin(admin.ModelAdmin):
    list_display = ('name', 'icon')
    search_fields = ('name',)
