from decimal import Decimal

from django.db import migrations, models


def backfill_average_buy_price(apps, schema_editor):
    Stock = apps.get_model("shop_management", "Stock")
    for stock in Stock.objects.select_related("purchase_item").all():
        purchase_item = stock.purchase_item
        if purchase_item and purchase_item.buy_price is not None:
            stock.average_buy_price = purchase_item.buy_price
        else:
            stock.average_buy_price = Decimal("0.00")
        stock.save(update_fields=["average_buy_price"])


class Migration(migrations.Migration):

    dependencies = [
        ("shop_management", "0057_stocktransfer_discount_amount_alter_advance_amount_and_more"),
    ]

    operations = [
        migrations.AddField(
            model_name="stock",
            name="average_buy_price",
            field=models.DecimalField(default="0.00", decimal_places=2, help_text="Weighted average purchase cost for the current stock quantity.", max_digits=12),
        ),
        migrations.RunPython(backfill_average_buy_price, migrations.RunPython.noop),
    ]
