# Generated by Django 3.2.5 on 2021-10-01 20:12

from django.db import migrations, models


def set_thread_id(app_registry, schema_editor):
    """set thread ids"""
    db_alias = schema_editor.connection.alias
    # set the thread id on parent nodes
    model = app_registry.get_model("bookwyrm", "Status")
    model.objects.using(db_alias).filter(reply_parent__isnull=True).update(
        thread_id=models.F("id")
    )

    queryset = model.objects.using(db_alias).filter(
        reply_parent__isnull=False,
        reply_parent__thread_id__isnull=False,
        thread_id__isnull=True,
    )
    iters = 0
    while queryset.exists():
        queryset.update(
            thread_id=models.Subquery(
                model.objects.filter(id=models.OuterRef("reply_parent")).values_list(
                    "thread_id"
                )[:1]
            )
        )
        print(iters)
        iters += 1
        if iters > 50:
            print("exceeded query depth")
            break


def reverse(*_):
    """do nothing"""


class Migration(migrations.Migration):

    dependencies = [
        ("bookwyrm", "0103_remove_connector_local"),
    ]

    operations = [
        migrations.AddField(
            model_name="status",
            name="thread_id",
            field=models.IntegerField(blank=True, null=True),
        ),
        migrations.RunPython(set_thread_id, reverse),
    ]
