from django.db import migrations, models


def assign_existing_roles(apps, schema_editor):
    Account = apps.get_model('accounts', 'Account')
    super_admin = Account.objects.filter(is_superuser=True).order_by('created_at', 'pk').first()
    if super_admin:
        Account.objects.filter(pk=super_admin.pk).update(role='SUPER_ADMIN')
        Account.objects.filter(is_superuser=True).exclude(pk=super_admin.pk).update(role='ADMIN')
    Account.objects.filter(is_staff=True, role='VIEWER').update(role='ADMIN')


class Migration(migrations.Migration):
    dependencies = [('accounts', '0004_account_language_account_theme')]

    operations = [
        migrations.AddField(
            model_name='account',
            name='role',
            field=models.CharField(
                choices=[
                    ('SUPER_ADMIN', 'Super admin'),
                    ('ADMIN', 'Admin'),
                    ('VIEWER', 'Viewer'),
                ],
                default='VIEWER',
                max_length=16,
            ),
        ),
        migrations.RunPython(assign_existing_roles, migrations.RunPython.noop),
        migrations.AddConstraint(
            model_name='account',
            constraint=models.UniqueConstraint(
                condition=models.Q(('role', 'SUPER_ADMIN')),
                fields=('role',),
                name='only_one_super_admin',
            ),
        ),
    ]
