from django.contrib import admin

from .models import (
    Branch,
    Brand,
    GalleryImage,
    Inventory,
    Lead,
    Offer,
    Part,
    Scooter,
    ScooterAsset3D,
    ScooterImage,
    TestRideBooking,
    Testimonial,
)


class ScooterImageInline(admin.TabularInline):
    model = ScooterImage
    extra = 1


class ScooterAsset3DInline(admin.StackedInline):
    model = ScooterAsset3D
    extra = 0
    max_num = 1


class InventoryInline(admin.TabularInline):
    model = Inventory
    extra = 1


@admin.register(Brand)
class BrandAdmin(admin.ModelAdmin):
    list_display = ["name", "slug", "key_strength", "is_featured", "updated_at"]
    list_filter = ["is_featured"]
    search_fields = ["name", "short_description", "key_strength"]
    prepopulated_fields = {"slug": ("name",)}


@admin.register(Branch)
class BranchAdmin(admin.ModelAdmin):
    list_display = ["city", "district", "type", "phone", "updated_at"]
    search_fields = ["name", "city", "district", "phone"]
    prepopulated_fields = {"slug": ("city", "district")}


@admin.register(Scooter)
class ScooterAdmin(admin.ModelAdmin):
    list_display = [
        "name",
        "brand",
        "price",
        "offer_price",
        "range_km",
        "published",
        "is_featured",
        "updated_at",
    ]
    list_filter = ["brand", "published", "is_featured", "ar_enabled"]
    search_fields = ["name", "short_description", "battery", "motor_power"]
    prepopulated_fields = {"slug": ("name",)}
    inlines = [ScooterImageInline, ScooterAsset3DInline, InventoryInline]


@admin.register(ScooterImage)
class ScooterImageAdmin(admin.ModelAdmin):
    list_display = ["scooter", "alt", "sort_order"]
    list_filter = ["scooter__brand"]
    search_fields = ["scooter__name", "alt"]


@admin.register(ScooterAsset3D)
class ScooterAsset3DAdmin(admin.ModelAdmin):
    list_display = ["scooter", "status", "updated_at"]
    list_filter = ["status"]
    search_fields = ["scooter__name", "scooter__brand__name"]


@admin.register(Inventory)
class InventoryAdmin(admin.ModelAdmin):
    list_display = ["scooter", "branch", "status", "quantity", "test_ride_available", "updated_at"]
    list_filter = ["status", "branch", "test_ride_available"]
    search_fields = ["scooter__name", "branch__city"]


@admin.register(Part)
class PartAdmin(admin.ModelAdmin):
    list_display = ["name", "category", "price", "inquiry_only", "stock_status", "updated_at"]
    list_filter = ["category", "inquiry_only", "stock_status"]
    search_fields = ["name", "category", "compatibility"]


@admin.register(Offer)
class OfferAdmin(admin.ModelAdmin):
    list_display = ["title", "category", "discount_label", "valid_until", "active", "updated_at"]
    list_filter = ["category", "active", "valid_until"]
    search_fields = ["title", "description", "discount_label"]


@admin.register(GalleryImage)
class GalleryImageAdmin(admin.ModelAdmin):
    list_display = ["title", "category", "featured", "branch", "scooter", "updated_at"]
    list_filter = ["category", "featured", "branch"]
    search_fields = ["title", "alt"]


@admin.register(Testimonial)
class TestimonialAdmin(admin.ModelAdmin):
    list_display = ["customer_name", "location", "rating", "scooter_name", "updated_at"]
    list_filter = ["rating"]
    search_fields = ["customer_name", "location", "comment", "scooter_name"]


@admin.register(TestRideBooking)
class TestRideBookingAdmin(admin.ModelAdmin):
    list_display = ["full_name", "phone", "branch", "scooter", "preferred_date", "status", "created_at"]
    list_filter = ["status", "branch", "scooter", "preferred_date"]
    search_fields = ["full_name", "phone", "email", "message"]


@admin.register(Lead)
class LeadAdmin(admin.ModelAdmin):
    list_display = ["full_name", "phone", "source", "status", "branch", "scooter", "created_at"]
    list_filter = ["source", "status", "branch", "scooter"]
    search_fields = ["full_name", "phone", "email", "subject", "message", "notes"]
