from django.db import migrations
import random
import string


def transform_order_codes(apps, schema_editor):
    Order = apps.get_model('orders', 'Order')
    existing = set(Order.objects.exclude(order_code__isnull=True).values_list('order_code', flat=True))
    def new_code():
        return ''.join(random.choices(string.ascii_uppercase, k=2)) + ''.join(random.choices(string.digits, k=8))
    for order in Order.objects.all():
        code = order.order_code or ''
        needs_update = False
        if not code:
            needs_update = True
        elif code.startswith('ORD-') and code[4:].isdigit():
            needs_update = True
        elif len(code) != 10 or (not code[:2].isalpha()) or (not code[:2].isupper()) or (not code[2:].isdigit()):
            needs_update = True
        if needs_update:
            for _ in range(200):
                c = new_code()
                if c not in existing and not Order.objects.filter(order_code=c).exists():
                    order.order_code = c
                    order.save(update_fields=['order_code'])
                    existing.add(c)
                    break


class Migration(migrations.Migration):
    dependencies = [
        ('orders', '0004_populate_order_code'),
    ]

    operations = [
        migrations.RunPython(transform_order_codes, migrations.RunPython.noop),
    ]
