from django.db import migrations, models


def backfill_description_options(apps, schema_editor):
    VerificationInvoice = apps.get_model("verification", "VerificationInvoice")
    VerificationDescriptionOption = apps.get_model("verification", "VerificationDescriptionOption")

    labels = []
    seen = set()
    for raw_label in VerificationInvoice.objects.exclude(description="").values_list("description", flat=True).distinct():
        label = (raw_label or "").strip()
        if not label or label in seen:
            continue
        seen.add(label)
        labels.append(label)

    for index, label in enumerate(labels, start=1):
        VerificationDescriptionOption.objects.get_or_create(
            label=label,
            defaults={
                "sort_order": index,
                "is_active": True,
            },
        )


class Migration(migrations.Migration):

    dependencies = [
        ("verification", "0011_delete_supplierdirectory"),
    ]

    operations = [
        migrations.CreateModel(
            name="VerificationDescriptionOption",
            fields=[
                ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                ("label", models.CharField(max_length=255, unique=True)),
                ("is_active", models.BooleanField(default=True)),
                ("sort_order", models.PositiveIntegerField(default=1)),
            ],
            options={
                "ordering": ["sort_order", "label", "id"],
            },
        ),
        migrations.AddIndex(
            model_name="verificationdescriptionoption",
            index=models.Index(fields=["is_active", "sort_order"], name="verificatio_is_acti_68984a_idx"),
        ),
        migrations.AddField(
            model_name="verificationinvoice",
            name="plot_number",
            field=models.CharField(blank=True, default="", max_length=64),
        ),
        migrations.AddField(
            model_name="verificationinvoice",
            name="tos",
            field=models.CharField(blank=True, choices=[("contractor", "Contractor"), ("consultant", "Consultant"), ("supplier", "Supplier")], default="", max_length=16),
        ),
        migrations.RunPython(backfill_description_options, migrations.RunPython.noop),
    ]
