from django.contrib import admin

from .models import (
    AccessCard,
    AccessLog,
    AccessPoint,
    Equipment,
    EquipmentCategory,
    FacilityBooking,
    GiftCard,
    GymDoorQR,
    MaintenanceLog,
    POSTransaction,
    POSTransactionItem,
    Product,
    PurchaseOrder,
    PurchaseOrderItem,
    Supplier,
    TimeBasedAccessRule,
    Visitor,
)


@admin.register(AccessPoint)
class AccessPointAdmin(admin.ModelAdmin):
    list_display = ("name", "location", "access_type", "hardware_id", "is_active")
    list_filter = ("access_type", "is_active", "location")
    search_fields = ("name", "hardware_id")


@admin.register(AccessLog)
class AccessLogAdmin(admin.ModelAdmin):
    list_display = ("person_type", "member", "visitor", "access_point", "direction", "method", "timestamp", "granted")
    list_filter = ("person_type", "direction", "method", "granted")
    search_fields = ("member__user__email", "visitor__name", "denial_reason")
    date_hierarchy = "timestamp"


@admin.register(AccessCard)
class AccessCardAdmin(admin.ModelAdmin):
    list_display = ("card_number", "member", "card_type", "is_active", "issued_at")
    list_filter = ("card_type", "is_active")
    search_fields = ("card_number", "member__user__email")


@admin.register(TimeBasedAccessRule)
class TimeBasedAccessRuleAdmin(admin.ModelAdmin):
    list_display = ("name", "location", "day_of_week", "start_time", "end_time", "is_active")
    list_filter = ("day_of_week", "is_active", "location")
    search_fields = ("name",)


@admin.register(EquipmentCategory)
class EquipmentCategoryAdmin(admin.ModelAdmin):
    list_display = ("name", "created_at")
    search_fields = ("name",)


@admin.register(Equipment)
class EquipmentAdmin(admin.ModelAdmin):
    list_display = ("name", "category", "location", "status", "purchase_date", "next_maintenance")
    list_filter = ("status", "category", "location")
    search_fields = ("name", "serial_number")


@admin.register(MaintenanceLog)
class MaintenanceLogAdmin(admin.ModelAdmin):
    list_display = ("equipment", "maintenance_type", "performed_by", "date", "cost", "next_scheduled")
    list_filter = ("maintenance_type",)
    search_fields = ("equipment__name", "description")
    date_hierarchy = "date"


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ("name", "sku", "category", "price", "stock_quantity", "is_active")
    list_filter = ("category", "is_active", "location")
    search_fields = ("name", "sku", "description")


@admin.register(Supplier)
class SupplierAdmin(admin.ModelAdmin):
    list_display = ("name", "contact_person", "email", "phone", "is_active")
    list_filter = ("is_active",)
    search_fields = ("name", "contact_person", "email")


@admin.register(PurchaseOrder)
class PurchaseOrderAdmin(admin.ModelAdmin):
    list_display = ("order_number", "supplier", "order_date", "status", "total_amount")
    list_filter = ("status",)
    search_fields = ("order_number", "supplier__name")
    date_hierarchy = "order_date"


@admin.register(PurchaseOrderItem)
class PurchaseOrderItemAdmin(admin.ModelAdmin):
    list_display = ("order", "product", "quantity", "unit_price", "received_quantity")
    search_fields = ("product__name", "order__order_number")


@admin.register(POSTransaction)
class POSTransactionAdmin(admin.ModelAdmin):
    list_display = ("id", "member", "cashier", "location", "total", "payment_method", "status", "created_at")
    list_filter = ("payment_method", "status", "location")
    search_fields = ("member__user__email", "cashier__email")
    date_hierarchy = "created_at"


@admin.register(POSTransactionItem)
class POSTransactionItemAdmin(admin.ModelAdmin):
    list_display = ("transaction", "description", "quantity", "unit_price", "total_price")
    search_fields = ("description", "product__name")


@admin.register(GiftCard)
class GiftCardAdmin(admin.ModelAdmin):
    list_display = ("code", "balance", "initial_balance", "is_active", "expires_at")
    list_filter = ("is_active",)
    search_fields = ("code",)


@admin.register(FacilityBooking)
class FacilityBookingAdmin(admin.ModelAdmin):
    list_display = ("facility_name", "facility_type", "member", "location", "start_time", "end_time", "status")
    list_filter = ("facility_type", "status", "location")
    search_fields = ("facility_name", "member__user__email")
    date_hierarchy = "start_time"


@admin.register(Visitor)
class VisitorAdmin(admin.ModelAdmin):
    list_display = ("name", "phone", "visitor_code", "location", "registered_by", "is_active", "created_at")
    list_filter = ("is_active", "location")
    search_fields = ("name", "phone", "visitor_code")
    readonly_fields = ("visitor_code",)


@admin.register(GymDoorQR)
class GymDoorQRAdmin(admin.ModelAdmin):
    list_display = ("location", "qr_payload", "is_active", "created_at")
    list_filter = ("is_active", "location")
    readonly_fields = ("qr_payload",)
