from django.contrib import admin

from operations.models import (
    Class,
    Course,
    Enrollment,
    Event,
    EventEnrollment,
    Material,
    Payment,
    Topic,
)


class TopicInline(admin.TabularInline):
    model = Topic
    extra = 0
    fields = ("name", "order")


@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    list_display = ("name", "code", "is_active", "created_at")
    list_filter = ("is_active",)
    search_fields = ("name", "code")
    inlines = [TopicInline]


@admin.register(Topic)
class TopicAdmin(admin.ModelAdmin):
    list_display = ("name", "course", "parent", "order")
    list_filter = ("course",)
    search_fields = ("name", "course__name")


class EnrollmentInline(admin.TabularInline):
    model = Enrollment
    extra = 0
    fields = ("student", "status", "enrolled_at")


@admin.register(Class)
class ClassAdmin(admin.ModelAdmin):
    list_display = ("name", "course", "instructor", "mode", "price", "max_capacity", "is_active")
    list_filter = ("mode", "is_active", "course")
    search_fields = ("name", "course__name", "instructor__first_name")
    inlines = [EnrollmentInline]


@admin.register(Enrollment)
class EnrollmentAdmin(admin.ModelAdmin):
    list_display = ("student", "klass", "status", "enrolled_at")
    list_filter = ("status", "klass__course")
    search_fields = ("student__first_name", "student__username", "klass__name")


@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
    list_display = ("title", "date", "time", "mode", "status", "max_capacity")
    list_filter = ("status", "mode")
    search_fields = ("title", "description")


@admin.register(EventEnrollment)
class EventEnrollmentAdmin(admin.ModelAdmin):
    list_display = ("event", "user", "guest_name", "guest_phone", "status", "enrolled_at")
    list_filter = ("status", "event")
    search_fields = ("guest_name", "guest_phone", "user__username")


@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
    list_display = ("enrollment", "amount", "method", "status", "date", "confirmed_by")
    list_filter = ("status", "method")
    search_fields = ("enrollment__student__username", "reference")


@admin.register(Material)
class MaterialAdmin(admin.ModelAdmin):
    list_display = ("title", "material_type", "course", "topic", "klass", "is_public")
    list_filter = ("material_type", "is_public", "course")
    search_fields = ("title", "description")
