from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from .models import (
    AuditLog,
    AutomationRule,
    Contract,
    GymSettings,
    Holiday,
    IncidentReport,
    Location,
    LocationSettings,
    Notification,
    SignedWaiver,
    User,
    Waiver,
)


# ---------------------------------------------------------------------------
# User
# ---------------------------------------------------------------------------

@admin.register(User)
class UserAdmin(BaseUserAdmin):
    list_display = (
        "username",
        "email",
        "first_name",
        "last_name",
        "role",
        "is_active_member",
        "is_staff",
    )
    list_filter = ("role", "is_active_member", "is_staff", "is_superuser", "gender")
    search_fields = ("username", "email", "first_name", "last_name", "phone")
    fieldsets = BaseUserAdmin.fieldsets + (
        (
            "Profile",
            {
                "fields": (
                    "phone",
                    "role",
                    "avatar",
                    "date_of_birth",
                    "gender",
                    "is_active_member",
                ),
            },
        ),
        (
            "Address",
            {
                "fields": (
                    "address_line_1",
                    "address_line_2",
                    "city",
                    "state",
                    "postal_code",
                    "country",
                ),
            },
        ),
    )


# ---------------------------------------------------------------------------
# Multi-Location
# ---------------------------------------------------------------------------

@admin.register(Location)
class LocationAdmin(admin.ModelAdmin):
    list_display = ("name", "city", "country", "phone", "is_active", "capacity")
    list_filter = ("is_active", "country", "city")
    search_fields = ("name", "city", "country")


@admin.register(LocationSettings)
class LocationSettingsAdmin(admin.ModelAdmin):
    list_display = ("location", "primary_color", "secondary_color")
    search_fields = ("location__name",)


# ---------------------------------------------------------------------------
# Settings
# ---------------------------------------------------------------------------

@admin.register(GymSettings)
class GymSettingsAdmin(admin.ModelAdmin):
    list_display = ("gym_name", "currency", "tax_rate", "timezone")


# ---------------------------------------------------------------------------
# Compliance & Security
# ---------------------------------------------------------------------------

@admin.register(Waiver)
class WaiverAdmin(admin.ModelAdmin):
    list_display = ("title", "version", "is_active", "created_at")
    list_filter = ("is_active",)
    search_fields = ("title",)


@admin.register(SignedWaiver)
class SignedWaiverAdmin(admin.ModelAdmin):
    list_display = ("member", "waiver", "signed_at", "ip_address")
    list_filter = ("waiver",)
    search_fields = ("member__username", "member__email")


@admin.register(Contract)
class ContractAdmin(admin.ModelAdmin):
    list_display = ("member", "plan", "start_date", "end_date", "status")
    list_filter = ("status",)
    search_fields = ("member__username", "member__email")


@admin.register(IncidentReport)
class IncidentReportAdmin(admin.ModelAdmin):
    list_display = (
        "title",
        "location",
        "reported_by",
        "severity",
        "status",
        "created_at",
    )
    list_filter = ("severity", "status", "location")
    search_fields = ("title", "description")


@admin.register(AuditLog)
class AuditLogAdmin(admin.ModelAdmin):
    list_display = ("user", "action", "model_name", "object_id", "timestamp")
    list_filter = ("action", "model_name")
    search_fields = ("user__username", "action", "model_name", "object_id")
    readonly_fields = (
        "user",
        "action",
        "model_name",
        "object_id",
        "changes",
        "ip_address",
        "timestamp",
    )


# ---------------------------------------------------------------------------
# Automation
# ---------------------------------------------------------------------------

@admin.register(AutomationRule)
class AutomationRuleAdmin(admin.ModelAdmin):
    list_display = ("name", "trigger_event", "is_active", "last_triggered")
    list_filter = ("is_active", "trigger_event")
    search_fields = ("name", "trigger_event")


# ---------------------------------------------------------------------------
# Notifications
# ---------------------------------------------------------------------------

@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    list_display = ("title", "user", "notification_type", "is_read", "created_at")
    list_filter = ("notification_type", "is_read")
    search_fields = ("title", "user__username", "user__email")


# ---------------------------------------------------------------------------
# Holidays
# ---------------------------------------------------------------------------

@admin.register(Holiday)
class HolidayAdmin(admin.ModelAdmin):
    list_display = ("name", "date", "location", "is_recurring", "affects_schedule")
    list_filter = ("is_recurring", "affects_schedule", "location")
    search_fields = ("name",)
