from django.contrib import admin

from .models import (
    ClassAttendanceLog,
    ClassBooking,
    ClassSession,
    ClassType,
    RecurringClassTemplate,
    Room,
    VirtualClassSession,
    WaitlistEntry,
)


@admin.register(ClassType)
class ClassTypeAdmin(admin.ModelAdmin):
    list_display = ("name", "category", "difficulty_level", "default_duration_minutes", "default_capacity", "is_active")
    list_filter = ("category", "difficulty_level", "is_active")
    search_fields = ("name", "description")


@admin.register(Room)
class RoomAdmin(admin.ModelAdmin):
    list_display = ("name", "location", "capacity", "room_type", "status", "is_active")
    list_filter = ("room_type", "status", "is_active")
    search_fields = ("name",)


@admin.register(ClassSession)
class ClassSessionAdmin(admin.ModelAdmin):
    list_display = ("title", "short_id", "class_type", "instructor", "start_time", "end_time", "status", "enrolled_count", "capacity")
    list_filter = ("status", "recurrence_type", "class_type", "location")
    search_fields = ("title", "short_id", "description")
    date_hierarchy = "start_time"


@admin.register(ClassBooking)
class ClassBookingAdmin(admin.ModelAdmin):
    list_display = ("short_id", "class_session", "member", "status", "booked_at", "checked_in_at")
    list_filter = ("status",)
    search_fields = ("short_id", "member__user__email")


@admin.register(RecurringClassTemplate)
class RecurringClassTemplateAdmin(admin.ModelAdmin):
    list_display = ("class_type", "instructor", "day_of_week", "start_time", "end_time", "is_active")
    list_filter = ("day_of_week", "is_active", "location")
    search_fields = ("class_type__name",)


@admin.register(VirtualClassSession)
class VirtualClassSessionAdmin(admin.ModelAdmin):
    list_display = ("class_session", "platform", "is_live", "max_online_participants")
    list_filter = ("platform", "is_live")


@admin.register(ClassAttendanceLog)
class ClassAttendanceLogAdmin(admin.ModelAdmin):
    list_display = ("class_session", "member", "check_in_time", "check_out_time", "method")
    list_filter = ("method",)
    date_hierarchy = "check_in_time"


@admin.register(WaitlistEntry)
class WaitlistEntryAdmin(admin.ModelAdmin):
    list_display = ("class_session", "member", "position", "joined_at", "notified")
    list_filter = ("notified",)
    search_fields = ("member__user__email",)
