from django.contrib import admin
from .models import Property, PropertyImage, Amenity
from enquiries.admin import export_as_csv


class PropertyImageInline(admin.TabularInline):
    model = PropertyImage
    extra = 3
    fields = ['image', 'caption', 'is_primary', 'order']


class ChildPropertyInline(admin.TabularInline):
    model = Property
    fk_name = 'parent'
    extra = 0
    fields = ['title', 'listing_type', 'property_type', 'status', 'price', 'is_published']
    show_change_link = True
    verbose_name = 'Child Unit / Plot'
    verbose_name_plural = 'Child Units / Plots (within this estate)'


@admin.register(Property)
class PropertyAdmin(admin.ModelAdmin):
    list_display = [
        'title', 'listing_type', 'property_type', 'status',
        'formatted_price', 'city', 'state', 'is_featured', 'is_published', 'created_at'
    ]
    list_filter = ['listing_type', 'property_type', 'status', 'city', 'state', 'is_featured', 'is_published', 'is_furnished', 'is_serviced', 'is_newly_built']
    search_fields = ['title', 'address', 'city', 'state']
    prepopulated_fields = {'slug': ('title',)}
    list_editable = ['is_featured', 'is_published']
    readonly_fields = ['created_at', 'updated_at']
    inlines = [PropertyImageInline, ChildPropertyInline]
    filter_horizontal = ['amenities']
    actions = [export_as_csv]

    fieldsets = (
        ('Basic Information', {
            'fields': ('title', 'slug', 'description', 'parent', 'masterplan_image')
        }),
        ('Listing Details', {
            'fields': ('listing_type', 'property_type', 'status', 'price', 'price_suffix', 'negotiable')
        }),
        ('Property Specifications', {
            'fields': ('bedrooms', 'bathrooms', 'toilets', 'area_sqm', 'floors', 'parking_spaces')
        }),
        ('Advanced Features', {
            'fields': ('is_furnished', 'is_serviced', 'is_newly_built')
        }),
        ('Location', {
            'fields': ('address', 'city', 'state', 'lga', 'latitude', 'longitude')
        }),
        ('Amenities', {
            'fields': ('amenities',)
        }),
        ('Media & Downloads', {
            'fields': ('brochure', 'video_url', 'virtual_tour_url')
        }),
        ('Visibility', {
            'fields': ('is_featured', 'is_published')
        }),
        ('SEO', {
            'fields': ('meta_title', 'meta_description'),
            'classes': ('collapse',)
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(Amenity)
class AmenityAdmin(admin.ModelAdmin):
    list_display = ['name', 'icon']
    search_fields = ['name']
