# Generated by Django 5.2.11 on 2026-04-14 07:53

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


def backfill_conversation_participants(apps, schema_editor):
    Conversation = apps.get_model('core', 'Conversation')
    for conv in Conversation.objects.select_related('trip__shipment').all():
        trip = conv.trip
        if not trip or not trip.shipment_id:
            continue
        conv.shipment_id = trip.shipment_id
        conv.shipper_id = trip.shipment.shipper_id
        conv.transporter_id = trip.transporter_id
        conv.save(update_fields=['shipment', 'shipper', 'transporter'])


class Migration(migrations.Migration):

    dependencies = [
        ('core', '0005_admintripaction'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AddField(
            model_name='conversation',
            name='shipment',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='conversations', to='core.shipment'),
        ),
        migrations.AddField(
            model_name='conversation',
            name='shipper',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='shipper_conversations', to=settings.AUTH_USER_MODEL),
        ),
        migrations.AddField(
            model_name='conversation',
            name='transporter',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transporter_conversations', to=settings.AUTH_USER_MODEL),
        ),
        migrations.AlterField(
            model_name='conversation',
            name='trip',
            field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='conversation', to='core.trip'),
        ),
        migrations.RunPython(backfill_conversation_participants, migrations.RunPython.noop),
        migrations.AddConstraint(
            model_name='conversation',
            constraint=models.UniqueConstraint(fields=('shipment', 'shipper', 'transporter'), name='uniq_conversation_shipment_shipper_transporter'),
        ),
    ]
