from django.db import migrations


def backfill(apps, schema_editor):
    """Assign numbers to pre-existing projects.

    Existing rows have no departments (the M2M ships empty in 0033), so every
    one gets the PRJ fallback prefix. Year comes from created_at, and the
    sequence follows creation order so the numbering matches project age.
    """
    Project = apps.get_model("projects", "Project")
    seq_by_stem: dict[tuple, int] = {}
    for project in Project.objects.filter(project_number="").order_by("created_at", "id"):
        stem = (project.organization_id, f"PRJ.{project.created_at.year % 100:02d}.")
        seq = seq_by_stem.get(stem, 0) + 1
        seq_by_stem[stem] = seq
        project.project_number = f"{stem[1]}{seq:03d}"
        project.save(update_fields=["project_number"])


def reverse(apps, schema_editor):
    Project = apps.get_model("projects", "Project")
    Project.objects.update(project_number="")


class Migration(migrations.Migration):
    dependencies = [("projects", "0033_project_departments_project_project_number_and_more")]
    operations = [migrations.RunPython(backfill, reverse)]
