# Generated by Django 6.0.4 on 2026-07-29 12:34, hand-adjusted:
# backfill organization to the bootstrapped CSIS org, then tighten to non-null.
# Message additionally tries to inherit from related_task/related_approval first,
# for accuracy, before falling back to the org-wide default.

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


def backfill_organization(apps, schema_editor):
    Organization = apps.get_model('companies', 'Organization')
    Task = apps.get_model('tasks', 'Task')
    Approval = apps.get_model('tasks', 'Approval')
    Message = apps.get_model('tasks', 'Message')

    org = Organization.objects.first()
    if org is None:
        return
    Task.objects.filter(organization__isnull=True).update(organization=org)
    Approval.objects.filter(organization__isnull=True).update(organization=org)

    for msg in Message.objects.filter(organization__isnull=True).select_related("related_task", "related_approval"):
        if msg.related_task_id:
            msg.organization = msg.related_task.organization
        elif msg.related_approval_id:
            msg.organization = msg.related_approval.organization
        else:
            msg.organization = org
        msg.save(update_fields=["organization"])


def noop_reverse(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('companies', '0012_add_organization_scope'),
        ('tasks', '0002_task_completed_at_task_tasks_complet_7bfa5e_idx'),
    ]

    operations = [
        migrations.AddField(
            model_name='approval',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='approvals_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='message',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='task_messages_scoped', to='companies.organization'),
        ),
        migrations.AddField(
            model_name='task',
            name='organization',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='tasks_scoped', to='companies.organization'),
        ),
        migrations.RunPython(backfill_organization, noop_reverse),
        migrations.AlterField(
            model_name='approval',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='approvals_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='message',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='task_messages_scoped', to='companies.organization'),
        ),
        migrations.AlterField(
            model_name='task',
            name='organization',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tasks_scoped', to='companies.organization'),
        ),
    ]
