# Generated by Django 5.2.7 on 2026-07-03 14:50

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
from django.utils.crypto import get_random_string


def generate_unique_referral_code(apps, schema_editor):
    CustomUser = apps.get_model('users', 'CustomUser')

    def make_code(base):
        base = (base or get_random_string(8)).replace(' ', '').lower()[:32]
        if not base:
            base = get_random_string(8)
        code = base
        while CustomUser.objects.filter(referral_code=code).exists():
            code = f"{base}{get_random_string(4)}"
        return code

    for user in CustomUser.objects.all():
        if not user.referral_code:
            user.referral_code = make_code(user.username)
            user.save(update_fields=['referral_code'])


class Migration(migrations.Migration):

    dependencies = [
        ('users', '0002_customuser_account_locked_until_and_more'),
    ]

    operations = [
        migrations.AddField(
            model_name='customuser',
            name='referral_code',
            field=models.CharField(blank=True, max_length=64, null=True),
        ),
        migrations.AddField(
            model_name='customuser',
            name='referred_by',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='referrals', to=settings.AUTH_USER_MODEL),
        ),
        migrations.RunPython(generate_unique_referral_code, reverse_code=migrations.RunPython.noop),
        migrations.AlterField(
            model_name='customuser',
            name='referral_code',
            field=models.CharField(blank=True, max_length=64, unique=True),
        ),
    ]
