# Generated by Django 4.2.9 on 2026-02-28

from django.db import migrations


def forwards(apps, schema_editor):
    EmploymentRecord = apps.get_model("app", "EmploymentRecord")

    used_codes = set()
    max_seq = 0

    existing_codes = EmploymentRecord.objects.exclude(staff_id_code="").values_list("staff_id_code", flat=True)
    for raw in existing_codes:
        code = (raw or "").strip().upper()
        if not code:
            continue
        used_codes.add(code)
        if code.startswith("S-") and len(code) == 5 and code[2:].isdigit():
            max_seq = max(max_seq, int(code[2:]))

    pending = (
        EmploymentRecord.objects.select_related("staff")
        .filter(staff_id_code="")
        .order_by("id")
    )
    for record in pending:
        next_seq = max_seq + 1
        while next_seq <= 999:
            candidate = f"S-{next_seq:03d}"
            if candidate not in used_codes:
                EmploymentRecord.objects.filter(pk=record.pk).update(staff_id_code=candidate)
                used_codes.add(candidate)
                max_seq = next_seq
                break
            next_seq += 1


def backwards(apps, schema_editor):
    # Keep generated codes as historical identifiers.
    return


class Migration(migrations.Migration):

    dependencies = [
        ("app", "0081_merge_20260228_0001"),
    ]

    operations = [
        migrations.RunPython(forwards, backwards),
    ]
