from django.contrib.admin import (TabularInline, StackedInline,
                                  site, ModelAdmin)


from courses.models import (Meeting, CourseSite, SecureCourseFile,
                            MeetingFile, URL)

from markdownx.admin import MarkdownxModelAdmin

def hide_meeting_action(modeladmin, request, queryset):
    queryset.update(hide=True)

def show_meeting_action(modeladmin, request, queryset):
    queryset.update(hide=False)

class FileAdmin(ModelAdmin):
    model = SecureCourseFile

    def save_model(self, request, obj, form, change):
        print("FileAdmin save_model here")
        obj.uploaded_by = request.user
        obj.save()

    def save_formset(self, request, form, formset, change):
        if formset.model == SecureCourseFile:
            instances = formset.save(commit=False)
            for instance in instances:
                instance.uploaded_by = request.user
                instance.save()
        else:
            formset.save()
    #inlines = [PermissionInlineAdmin,]


class MeetingFileInline(TabularInline):
    model = MeetingFile
    extra = 1
    exclude = ('uploaded_by',)
    #inlines = [PermissionInlineAdmin,]


class URLInline(TabularInline):
    model = URL
    extra = 1
    exclude = ('date_posted', 'release_until')


def shift_down(modeladmin, request, queryset):
    """
    Shift down the entries in the schedule on the indicated
    day and subsequently.
    """
    first = queryset[0]


class MeetingAdmin(MarkdownxModelAdmin):
    fieldsets = (
        (None, {
            'fields': (('hide', 'course_record', 'session_type'),
                       ('date', 'topic'),
                       ('homework', 'reading', 'exam'))
        }),
        ('Advanced options', {
            #'classes': ('collapse', 'collapse-open'),
            'fields': ('urls', 'notes'),
        }),
    )
    inlines = [MeetingFileInline] #, URLInline, ]
    list_filter = ['date', 'course_record']
    actions = [hide_meeting_action, show_meeting_action,]



class MeetingInline(StackedInline):
    model = Meeting
    extra = 0
    exclude = ('notes',)
    inlines = [MeetingFileInline, ]


site.register(Meeting, MeetingAdmin)
site.register(CourseSite)
site.register(MeetingFile, FileAdmin)
site.register(SecureCourseFile, FileAdmin)
site.register(URL)
