from django.contrib import admin
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import User
from import_export.admin import ImportExportModelAdmin
from import_export import resources
from import_export.instance_loaders import CachedInstanceLoader

from zonaguruapps.models import StatusUser, ProfileUser, NamaSekolah, Kelas, Mapel, Ekskul, DataSiswa, JadwalKbm, \
    DataKbm, NilaiKbm, DataEkskul, NilaiEkskul, DataSekolahUtama, MediaAjar, DataLoker, KonfirmasiPembayaran, Blog, \
	DataTahfizh, ImageSlider


class UserResource(resources.ModelResource):

    def before_import_row(self, row, **kwargs):
        pwd = row['password']
        row['password'] = make_password(pwd)

    class Meta:
        model = User
        skip_unchanged = True
        instance_loader_class = CachedInstanceLoader


class UserAdmin(ImportExportModelAdmin):
    resource_class = UserResource
    skip_admin_log = True
    ordering = ['username']
    search_fields = ['first_name']
    list_filter = ('is_staff',)
    list_display = ('username', 'first_name', 'is_active',)

    save_as = True

    class Meta:
        model = User

    def user(self, instance):
        return instance.__str__()


admin.site.unregister(User)
admin.site.register(User, UserAdmin)


@admin.register(ProfileUser)
class ProfileUserAdmin(ImportExportModelAdmin):
    list_filter = ('provinsi',)
    search_fields = ['profile_user__username', 'profile_user__first_name']
    ordering = ['profile_user__first_name']
    list_display = ('profile_user', 'profile_user_first_name', 'profile_user_last_name', 'ttl', 'no_hp', 'kota', 'provinsi')

    save_as = True

    class Meta:
        model = ProfileUser

    def get_queryset(self, request):
        return self.Meta.model.objects.order_by('id')

    def profile_user_first_name(self, obj):
        return obj.profile_user.first_name

    def profile_user_last_name(self, obj):
        return obj.profile_user.last_name


@admin.register(StatusUser)
class StatusUserAdmin(ImportExportModelAdmin):
    search_fields = ['user__username', 'user__first_name']
    ordering = ['user__first_name']
    list_filter = ('is_free', 'is_premium',)
    list_display = ['user', 'user_first_name', 'user_last_name', 'is_free', 'is_premium', 'is_premium_end', 'registration_date', 'registration_premium_date']

    class Meta:
        model = StatusUser

    def user_first_name(self, obj):
        return obj.user.first_name

    def user_last_name(self, obj):
        return obj.user.last_name


@admin.register(DataSekolahUtama)
class DataSekolahUtamaAdmin(ImportExportModelAdmin):
    search_fields = ['nama_sekolah']
    ordering = ['nama_sekolah']
    list_filter = ('kota', 'provinsi',)
    list_display = ['nama_user', 'nama_sekolah', 'kota', 'provinsi']

    class Meta:
        model = DataSekolahUtama


@admin.register(MediaAjar)
class MediaAjarAdmin(ImportExportModelAdmin):
    search_fields = ['judul_media']
    ordering = ['judul_media']
    list_filter = ('kategori_konten', 'tipe_file',)
    list_display = ['judul_media', 'preview_media', 'kategori_konten', 'jumlah_download']

    class Meta:
        model = MediaAjar


@admin.register(DataLoker)
class DataLokerAdmin(ImportExportModelAdmin):
    search_fields = ['nama_sekolah']
    ordering = ['-tanggal']
    list_filter = ('kota',)
    list_display = ['judul_loker', 'nama_sekolah', 'kota', 'provinsi']

    class Meta:
        model = DataLoker


@admin.register(KonfirmasiPembayaran)
class KonfirmasiPembayaranAdmin(ImportExportModelAdmin):
    search_fields = ['nama_user__username', 'nama_user__first_name']
    ordering = ['-tanggal']
    list_filter = ('nama_bank',)
    list_display = ['nama_user', 'nama_user_first_name', 'nama_user_last_name', 'tanggal', 'nama_bank', 'nama_rek']

    class Meta:
        model = KonfirmasiPembayaran

    def nama_user_first_name(self, obj):
        return obj.nama_user.first_name

    def nama_user_last_name(self, obj):
        return obj.nama_user.last_name


@admin.register(DataKbm)
class DataKbmAdmin(ImportExportModelAdmin):
    search_fields = ['mapel']
    ordering = ['-tahun_ajar']
    list_filter = ('tahun_ajar',)
    list_display = ['nama_user', 'mapel', 'tahun_ajar']

    class Meta:
        model = DataKbm


@admin.register(DataTahfizh)
class DataTahfizhAdmin(ImportExportModelAdmin):
    search_fields = ['nama_sekolah']
    ordering = ['-tanggal']
    list_filter = ('nama_sekolah',)
    list_display = ['nama_user', 'nama_sekolah', 'kelas_halaqoh']

    class Meta:
        model = DataTahfizh


@admin.register(NamaSekolah)
class NamaSekolahAdmin(ImportExportModelAdmin):
    search_fields = ['nama_sekolah']
    ordering = ['nama_sekolah']
    list_filter = ('nama_sekolah',)
    list_display = ['nama_user', 'nama_sekolah']

    class Meta:
        model = NamaSekolah


@admin.register(Kelas)
class KelasAdmin(ImportExportModelAdmin):
    search_fields = ['nama_kelas']
    ordering = ['nama_kelas']
    list_filter = ('nama_kelas',)
    list_display = ['nama_user', 'nama_kelas']

    class Meta:
        model = Kelas


@admin.register(Mapel)
class MapelAdmin(ImportExportModelAdmin):
    search_fields = ['nama_mapel']
    ordering = ['nama_mapel']
    list_filter = ('nama_mapel',)
    list_display = ['nama_user', 'nama_mapel']

    class Meta:
        model = Mapel


@admin.register(Ekskul)
class EkskulAdmin(ImportExportModelAdmin):
    search_fields = ['nama_ekskul']
    ordering = ['nama_ekskul']
    list_filter = ('nama_ekskul',)
    list_display = ['nama_user', 'nama_ekskul']

    class Meta:
        model = Ekskul


@admin.register(DataEkskul)
class DataEkskulAdmin(ImportExportModelAdmin):
    search_fields = ['nama_ekskul']
    ordering = ['nama_ekskul']
    list_filter = ('nama_ekskul',)
    list_display = ['nama_ekskul', 'nama_sekolah', 'kelas']

    class Meta:
        model = DataEkskul


@admin.register(Blog)
class BlogAdmin(ImportExportModelAdmin):
    search_fields = ['judul']
    ordering = ['tanggal']
    list_filter = ('kategori',)
    list_display = ['tanggal', 'img_judul', 'judul', 'kategori']

    class Meta:
        model = Blog


@admin.register(ImageSlider)
class ImageSliderAdmin(ImportExportModelAdmin):
    search_fields = ['judul_slide']
    ordering = ['judul_slide']
    list_filter = ('judul_slide',)
    list_display = ['judul_slide', 'sub_judul_slide', 'file_image']

    class Meta:
        model = ImageSlider