from django.db import migrations, models
import django.db.models.deletion


def create_branch_profiles(apps, schema_editor):
    CompanySetting = apps.get_model("shop_management", "CompanySetting")
    Shop = apps.get_model("shop_management", "Shop")
    Currency = apps.get_model("shop_management", "Currency")
    global_setting = CompanySetting.objects.filter(shop__isnull=True).first()
    if not global_setting:
        return
    for shop in Shop.objects.all():
        branch_currency = Currency.objects.filter(
            shop=shop, title__iexact=global_setting.base_currency.title
        ).first() or Currency.objects.filter(shop=shop).first()
        if not branch_currency:
            continue
        CompanySetting.objects.get_or_create(
            shop=shop,
            defaults={
                "name": shop.name,
                "legal_name": global_setting.legal_name,
                "base_currency_id": branch_currency.id,
                "expiry_warning_days": global_setting.expiry_warning_days,
                "phone": global_setting.phone,
                "email": global_setting.email,
                "address": global_setting.address,
                "created_by_id": global_setting.created_by_id,
            },
        )


class Migration(migrations.Migration):
    dependencies = [("shop_management", "0099_customerbalancepayment_settlement_fields")]

    operations = [
        migrations.AddField(
            model_name="companysetting",
            name="shop",
            field=models.OneToOneField(
                blank=True,
                help_text="Branch this printable profile and operating policy belongs to.",
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="company_setting",
                to="shop_management.shop",
            ),
        ),
        migrations.RunPython(create_branch_profiles, migrations.RunPython.noop),
    ]
