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

MODELS = ("Attendance", "Holiday", "WorkSchedule", "LeaveRequest")


def assign_default_organization(apps, schema_editor):
    """Existing rows belong to the single, pre-multitenancy company: the `default` organization.

    The organization is created here only when there is data to move, so fresh databases are not
    polluted. `bootstrap_core` later reuses the same slug.
    """
    Organization = apps.get_model("organizations", "Organization")
    tables = [apps.get_model("infrastructure", name) for name in MODELS]
    if not any(model.objects.exists() for model in tables):
        return
    organization, _ = Organization.objects.get_or_create(
        slug="default", defaults={"name": "مجموعه پیش‌فرض", "kind": "customer"}
    )
    for model in tables:
        model.objects.filter(organization__isnull=True).update(organization=organization)


class Migration(migrations.Migration):

    dependencies = [
        ("organizations", "0001_initial"),
        ("infrastructure", "0003_user_mobile_user_mobile_verified_at_user_username"),
    ]

    operations = [
        migrations.AddField(
            model_name=name.lower(),
            name="organization",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.PROTECT,
                related_name="+",
                to="organizations.organization",
            ),
        )
        for name in MODELS
    ] + [migrations.RunPython(assign_default_organization, migrations.RunPython.noop)]
