from django.db import migrations
import random
import string

def forwards(apps, schema_editor):
    User = apps.get_model('accounts', 'User')
    existing = set(User.objects.exclude(unique_code__isnull=True).values_list('unique_code', flat=True))
    def gen():
        return ''.join(random.choices(string.ascii_uppercase, k=4)) + ''.join(random.choices(string.digits, k=6))
    to_update = []
    for u in User.objects.filter(unique_code__isnull=True):
        for _ in range(100):
            code = gen()
            if code not in existing:
                existing.add(code)
                u.unique_code = code
                to_update.append(u)
                break
    if to_update:
        User.objects.bulk_update(to_update, ['unique_code'])

def backwards(apps, schema_editor):
    User = apps.get_model('accounts', 'User')
    User.objects.update(unique_code=None)

class Migration(migrations.Migration):
    dependencies = [
        ('accounts', '0009_alter_user_unique_code'),
    ]
    operations = [
        migrations.RunPython(forwards, backwards),
    ]
