from django.contrib import admin
from .models import (
    Order,
    OrderDetail,
    Payment,
    OrderSettings,
    ShippingMethod,
    ShippingRate,
    ShippingOption,
    Province,
    City,
    Address,
    Zone,
    TipaxRate,
)


@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = ("id", "user", "is_paid", "shipping_method", "shipping_cost", "shipping_calculated_at")
    list_filter = ("is_paid", "shipping_method", "created_at")
    readonly_fields = ("shipping_cost", "shipping_calculated_at") # جلوگیری از تغییر دستی اشتباه توسط ادمین
    search_fields = ("id", "user__username", "invoice_number")



@admin.register(OrderDetail)
class OrderDetailAdmin(admin.ModelAdmin):
    list_display = ("order", "product", "count", "final_price")
    search_fields = ("order__id", "product__title")


@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
    list_display = ("order", "authority", "amount", "ref_id", "status", "created_at")
    search_fields = ("order__id", "authority", "ref_id")
    list_filter = ("status", "created_at")
    autocomplete_fields = ("order",)


@admin.register(OrderSettings)
class OrderSettingsAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        return not OrderSettings.objects.exists()


@admin.register(ShippingMethod)
class ShippingMethodAdmin(admin.ModelAdmin):
    list_display = ("name", "code", "active")
    search_fields = ("name", "code")
    list_filter = ("active",)


@admin.register(ShippingOption)
class ShippingOptionAdmin(admin.ModelAdmin):
    list_display = ("title", "method", "is_cod", "active")
    search_fields = ("title", "method__name", "method__code")
    list_filter = ("method", "is_cod", "active")
    autocomplete_fields = ("method",)


@admin.register(ShippingRate)
class ShippingRateAdmin(admin.ModelAdmin):
    list_display = ("method", "zone", "min_weight", "max_weight", "price", "is_active")
    list_filter = ("method", "zone", "is_active")
    search_fields = ("method__name", "zone__name")
    list_editable = ("price", "is_active") # امکان ویرایش سریع قیمت و فعال‌سازی از لیست
    autocomplete_fields = ("method", "zone")



@admin.register(Zone)
class ZoneAdmin(admin.ModelAdmin):
    list_display = ("name",)
    search_fields = ("name",)


@admin.register(Province)
class ProvinceAdmin(admin.ModelAdmin):
    list_display = ("name",)
    search_fields = ("name",)


@admin.register(City)
class CityAdmin(admin.ModelAdmin):
    list_display = ("name", "province", "zone")
    list_filter = ("province", "zone")
    search_fields = ("name", "province__name", "zone__name")
    autocomplete_fields = ("province", "zone")
    autocomplete_fields = ("province", "zone") # حتما زون را هم اضافه کنید

@admin.register(Address)
class AddressAdmin(admin.ModelAdmin):
    list_display = ("receiver_name", "province", "city", "receiver_phone")
    list_filter = ("province", "city")
    search_fields = (
        "user__username",
        "user__phone_number",
        "city__name",
        "province__name",
        "address_detail",
    )


@admin.register(TipaxRate)
class TipaxRateAdmin(admin.ModelAdmin):
    list_display = ("destination_zone", "max_weight", "price")
    list_filter = ("destination_zone",)
    search_fields = ("destination_zone__name",)
    autocomplete_fields = ("destination_zone",)
