from django.db import migrations, models
import django.db.models.deletion


def migrate_zones_to_operational_regions(apps, schema_editor):
    Zone = apps.get_model('core', 'Zone')
    OperationalRegion = apps.get_model('core', 'OperationalRegion')

    country_names = {
        'AE': 'United Arab Emirates',
        'SA': 'Saudi Arabia',
        'OM': 'Oman',
        'QA': 'Qatar',
        'BH': 'Bahrain',
        'KW': 'Kuwait',
        'PK': 'Pakistan',
    }

    for zone in Zone.objects.all().order_by('id'):
        country_code = (zone.country_code or '').strip().upper()
        if not country_code:
            continue
        region, _ = OperationalRegion.objects.get_or_create(country_code=country_code)
        zone.name = country_names.get(country_code, country_code)
        zone.operational_region = region
        zone.save(update_fields=['name', 'operational_region'])


class Migration(migrations.Migration):

    dependencies = [
        ('core', '0016_remove_zone_name'),
    ]

    operations = [
        migrations.CreateModel(
            name='OperationalRegion',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('country_code', models.CharField(max_length=2, unique=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'ordering': ['country_code'],
            },
        ),
        migrations.AddField(
            model_name='zone',
            name='name',
            field=models.CharField(blank=True, max_length=200),
        ),
        migrations.AddField(
            model_name='zone',
            name='operational_region',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name='zones',
                to='core.operationalregion',
            ),
        ),
        migrations.RunPython(migrate_zones_to_operational_regions, migrations.RunPython.noop),
        migrations.RemoveField(
            model_name='zone',
            name='country_code',
        ),
        migrations.AlterField(
            model_name='zone',
            name='name',
            field=models.CharField(max_length=200),
        ),
        migrations.AlterField(
            model_name='zone',
            name='operational_region',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name='zones',
                to='core.operationalregion',
            ),
        ),
        migrations.AddConstraint(
            model_name='zone',
            constraint=models.UniqueConstraint(
                fields=('name', 'operational_region'),
                name='unique_zone_name_per_operational_region',
            ),
        ),
        migrations.AlterModelOptions(
            name='zone',
            options={'ordering': ['name']},
        ),
    ]
