# Generated by Django 4.0.6 on 2022-08-19 15:58

from django.db import migrations


class Migration(migrations.Migration):

    dependencies = [
        ('question_bank', '0019_questionbank__filters_and__tags'),
        ('question', '0016_manually_fix_question_tags'),
    ]

    def modify(apps, schema_editor):

        QuestionBank = apps.get_model("question_bank", "QuestionBank")
        Question = apps.get_model("question", "Question")
        ScopedTag = apps.get_model("question", "ScopedTag")

        print("reading QuestionBank data from database")

        db_alias = schema_editor.connection.alias
        questionBanks = QuestionBank.objects.using(db_alias).all()

        i = 0
        count = len(questionBanks)
        previous_percent = -1

        for questionBank in questionBanks:

            percent = 100 * i // count
            if previous_percent != percent:
                print(str(percent) + "%")
                previous_percent = percent
            i += 1

            scoped_tag_query = ScopedTag.objects.using(
                db_alias).filter(question_bank=questionBank)
            for tag in scoped_tag_query:
                if not [_filter for _filter in questionBank._filters if _filter["key"] == tag.key]:
                    _same_key_scoped_tag_query = scoped_tag_query.filter(
                        key=tag.key)
                    values = []
                    for index, item in enumerate(_same_key_scoped_tag_query):
                        values.append({
                            "order": index,
                            "value": item.value,
                            "stock": Question.objects.using(
                                db_alias).filter(question_bank=questionBank, tags__contains={tag.key: item.value}).count(),
                            "children": []
                        },)
                    questionBank._filters.append({
                        "key": tag.key,
                        "order": len(questionBank._filters),
                        "values": values
                    })

            questionBank._tags = questionBank._filters
            questionBank.save()

    operations = [
        migrations.RunPython(modify),
    ]
