from django.db import migrations, models
import django.db.models.deletion


def copy_sale_warehouse_to_items(apps, schema_editor):
    SaleItem = apps.get_model("shop_management", "SaleItem")
    pending = []
    for item in SaleItem.objects.filter(warehouse__isnull=True).select_related("sale").iterator():
        if item.sale.warehouse_id:
            item.warehouse_id = item.sale.warehouse_id
            pending.append(item)
        if len(pending) >= 1000:
            SaleItem.objects.bulk_update(pending, ["warehouse"])
            pending = []
    if pending:
        SaleItem.objects.bulk_update(pending, ["warehouse"])


class Migration(migrations.Migration):
    dependencies = [("shop_management", "0120_alter_purchaseitem_buy_price_and_more")]

    operations = [
        migrations.AddField(
            model_name="saleitem",
            name="warehouse",
            field=models.ForeignKey(
                blank=True,
                help_text="Warehouse from which this line item is issued. Legacy rows fall back to the sale warehouse.",
                null=True,
                on_delete=django.db.models.deletion.PROTECT,
                related_name="sale_items",
                to="shop_management.warehouse",
            ),
        ),
        migrations.RunPython(copy_sale_warehouse_to_items, migrations.RunPython.noop),
    ]
