from rest_framework import serializers

from utils.validators import dic_validetor


def default_rates():
    return {
        "average": 0.0,
        "count": 0,
        "histogram": [
            {
                "star": 1,
                "count": 0
            },
            {
                "star": 2,
                "count": 0
            },
            {
                "star": 3,
                "count": 0
            },
            {
                "star": 4,
                "count": 0
            },
            {
                "star": 5,
                "count": 0
            }
        ]
    }


def check_and_fix_questions_count_integrity():
    from question.models import Question
    from question_bank.models import QuestionBank

    question_banks = QuestionBank.objects.all()
    for question_bank in question_banks:
        real_questions_count = Question.objects.filter(question_bank=question_bank, deleted=False).count()
        if real_questions_count != question_bank.questions_count:
            print(
                f'question count changed from {question_bank.questions_count} to {real_questions_count} for question bank with id={question_bank.id}')
            question_bank.questions_count = real_questions_count
            question_bank.save()
    print('done')


def filters_template_validator(filters):
    key = {'key': 'key', 'type': str}
    children = {'key': 'children', 'type': list}
    required_items = [key, children]
    optional_items = []

    for filter in filters:
        dic_validetor(data=filter, required_items=required_items, optional_items=optional_items, error_key='filters',
                      many=True, container_name='filters', raise_error_for_unexpected_key=True)
        filters_template_validator(filter['children'])
    return filters
