# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Generated by Django 2.2.6 on 2019-10-31 15:57

from django.db import migrations, models

from code_review_backend.issues.compare import detect_new_for_revision


def set_existing_as_new(apps, schema_editor):
    """
    Update default value for existing issues
    """
    Issue = apps.get_model("issues", "Issue")
    issues = Issue.objects.filter(diff__isnull=False).prefetch_related("diff")
    nb = issues.count()
    if not nb:
        return

    last_percent = 0
    for i, issue in enumerate(issues):
        issue.new_for_revision = detect_new_for_revision(
            issue.diff, issue.path, issue.hash
        )
        issue.save()

        # Display progress
        percent = int(100.0 * i / nb)
        if percent > last_percent:
            nb_new = Issue.objects.filter(new_for_revision=True).count()
            print(f"{percent}% : {i}/{nb} issues with {nb_new} new issues")
            last_percent = percent


class Migration(migrations.Migration):
    dependencies = [("issues", "0001_initial")]

    operations = [
        migrations.AddField(
            model_name="issue",
            name="new_for_revision",
            field=models.BooleanField(null=True),
        ),
        migrations.RunPython(set_existing_as_new, reverse_code=lambda x, y: None),
    ]
