from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline

from . import models, forms


class TagAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']
    search_fields = ['name']


class TagToObjectAdmin(admin.ModelAdmin):
    list_display = ['id', 'tag', 'object_id', 'content_type']
    search_fields = ['tag__name', 'object_id', 'content_type__name']
    autocomplete_fields = ['tag']


class TagInline(GenericTabularInline):
    model = models.TagToObject
    autocomplete_fields = ['tag']
    extra = 0
    verbose_name = 'Tag'
    classes = ['collapse']


class VideoAdmin(admin.ModelAdmin):
    form = forms.VideoForm
    fields = [
        'title',
        'slug',
        'status',
        'description',
        'local_file',
        's3_file',
        'thumbnail',
        'duration',
        'creator',
        'closed_captions',
        'categories',
        'created',
        'updated'
    ]
    list_display = ['id', 'title', 'slug', 'status', 'duration']
    readonly_fields = ['s3_file', 'created', 'updated']
    search_fields = ['title', 'slug']
    list_filter = ('status',)
    inlines = [TagInline]

    def has_add_permission(self, request):
        return False

    def save_model(self, request, obj, form, change):
        obj.creator = request.user
        super().save_model(request, obj, form, change)


class PlaylistVideoInline(admin.TabularInline):
    model = models.PlaylistVideo
    autocomplete_fields = ['video']
    extra = 0
    verbose_name = 'Video'
    verbose_name_plural = 'Video'
    fields = ('video',)


class PlayListAdmin(admin.ModelAdmin):
    list_display = ['id', 'title', 'type']
    readonly_fields = ['created', 'updated']
    list_filter = ('type', 'sort')
    inlines = [TagInline, PlaylistVideoInline]

    def get_inlines(self, request, obj):
        if obj and obj.type == models.DYNAMIC:
            return [TagInline, PlaylistVideoInline]
        return [PlaylistVideoInline]


class CategoryAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', ]


admin.site.register(models.Video, VideoAdmin)
admin.site.register(models.Playlist, PlayListAdmin)
admin.site.register(models.Category, CategoryAdmin)
admin.site.register(models.Tag, TagAdmin)
admin.site.register(models.TagToObject, TagToObjectAdmin)