from django.contrib import admin
from apps.certifications.models import (
    Certificate,
    CertificationApplication,
    CertificationProgram,
    ExamChoice,
    ExamQuestion,
    ProctorSession,
    TestScheduleSlot,
    TestingCenter,
)


class ExamChoiceInline(admin.TabularInline):
    model = ExamChoice
    extra = 4


@admin.register(ExamQuestion)
class ExamQuestionAdmin(admin.ModelAdmin):
    list_display = ('id', 'program', 'text', 'is_active', 'order')
    list_filter = ('program', 'is_active')
    inlines = [ExamChoiceInline]


@admin.register(CertificationProgram)
class CertificationProgramAdmin(admin.ModelAdmin):
    list_display = (
        'title', 'fee', 'questions_per_exam', 'min_question_bank',
        'passing_score', 'max_attempts', 'allow_center_exam',
        'require_proctor', 'is_published',
    )
    prepopulated_fields = {'slug': ('title',)}
    list_filter = ('is_published', 'require_proctor', 'allow_center_exam')
    filter_horizontal = ('teachers',)


@admin.register(TestingCenter)
class TestingCenterAdmin(admin.ModelAdmin):
    list_display = ('name', 'city', 'phone', 'is_active', 'sort_order')
    list_filter = ('is_active', 'city')
    prepopulated_fields = {'slug': ('name',)}


@admin.register(TestScheduleSlot)
class TestScheduleSlotAdmin(admin.ModelAdmin):
    list_display = ('center', 'date', 'start_time', 'end_time', 'capacity', 'program', 'is_active')
    list_filter = ('center', 'is_active', 'date')


@admin.register(CertificationApplication)
class CertificationApplicationAdmin(admin.ModelAdmin):
    list_display = (
        'candidate', 'program', 'status', 'exam_mode',
        'testing_center', 'schedule_slot', 'payment_kind', 'created_at',
    )
    list_filter = ('status', 'exam_mode', 'payment_method', 'payment_kind')


@admin.register(ProctorSession)
class ProctorSessionAdmin(admin.ModelAdmin):
    list_display = ('code', 'application', 'created_by', 'expires_at', 'unlocked_at', 'is_revoked')
    list_filter = ('is_revoked',)
    search_fields = ('code',)


@admin.register(Certificate)
class CertificateAdmin(admin.ModelAdmin):
    list_display = ('verification_code', 'recipient_name', 'program_title', 'score_percent', 'issued_at', 'is_revoked')
    search_fields = ('verification_code', 'recipient_name')
    list_filter = ('is_revoked',)
