from django.contrib import admin

from quiz.models import QuizTemplate, Quiz, QuizSheet, QuestionScore
from wikiazma import settings

if settings.DJANGO_ADMIN_IS_ENABLED:

    class QuizTemplateAdmin(admin.ModelAdmin):
        list_display = ('name', 'institute', '_blueprint', 'single_question_at_a_time', 'reanswerable', 'shuffle_questions',
                        'shuffle_choices', 'description', 'custom_report_card', 'quiz_type', 'modified_at', 'created_at')
        # search_fields = ()
        readonly_fields = ()


    admin.site.register(QuizTemplate, QuizTemplateAdmin)


    class QuizAdmin(admin.ModelAdmin):
        list_display = ('name', 'institute', 'start', 'end', 'duration', 'public', 'single_question_at_a_time', 'reanswerable',
                        'shuffle_questions', 'shuffle_choices', 'description', 'custom_report_card', 'quiz_type',
                        'short_first_question', 'correct_choices', 'modified_at', 'created_at')
        search_fields = ('name', 'duration',)
        readonly_fields = []

        def short_first_question(self, obj):
            try:
                from bs4 import BeautifulSoup
                soup = BeautifulSoup(obj._blueprint['retrievers'][0]['contents'][0]['question_text'])
                return soup.get_text()
            except Exception as e:
                print(e)
                return 'Error parsing Blueprint'

        def correct_choices(self, obj):
            retrievers = obj._blueprint['retrievers']

            correct_choices = []

            for retriever in retrievers:
                for content in retriever['contents']:
                    if 'choices' not in content or content['choices'] is None:
                        return 'choices not found in one of the questions'
                    for index, choice in enumerate(content['choices']):
                        if content['correct_choices'][0] == choice:
                            correct_choices.append(index + 1)

            return correct_choices


    admin.site.register(Quiz, QuizAdmin)


    class QuizSheetAdmin(admin.ModelAdmin):
        list_display = (
            'state', 'entrance_token', 'quiz', 'final_score', 'stats', 'entrance_date', 'allowed_start_at', 'allowed_finish_at',
            'duration', 'user', 'institute_student', 'modified_at', 'created_at')
        list_filter = ["state", ]
        readonly_fields = ()
        search_fields = ('entrance_token',)


    admin.site.register(QuizSheet, QuizSheetAdmin)


    class QuestionScoreAdmin(admin.ModelAdmin):
        list_display = ('corrector', 'quiz_sheet', 'question', 'blank', 'score', 'modified_at', 'created_at')
        search_fields = ('corrector__last_name', 'corrector__first_name')
        readonly_fields = ()


    admin.site.register(QuestionScore, QuestionScoreAdmin)

else:
    # TODO
    pass
