from django.contrib import admin
from django.db.models import Q
from .models import Course, CourseTeacher
from departments.models import Department


class CourseTeacherInline(admin.TabularInline):
    model = CourseTeacher
    extra = 1


@admin.register(Course)
class CourseAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'code', 'credit', 'credit_hours', 'department', 'display_teachers')
    search_fields = ('name', 'code')
    prepopulated_fields = {'slug': ('name',)}
    list_filter = ('credit', 'department')
    inlines = [CourseTeacherInline]

    def display_teachers(self, obj):
        return ", ".join([str(teacher) for teacher in obj.teachers.all()])
    display_teachers.short_description = 'Teachers'

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'department':
            kwargs['queryset'] = Department.objects.filter(
                Q(is_global=True) | Q(organization__isnull=False)
            )
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
