from decimal import Decimal, InvalidOperation, ROUND_HALF_UP

import django.core.validators
from django.db import migrations, models


def round_farmer_listing_quantities(apps, schema_editor):
    FarmerMarketListing = apps.get_model("market", "FarmerMarketListing")

    for listing in FarmerMarketListing.objects.only("id", "quantity_available").iterator():
        try:
            rounded_quantity = Decimal(str(listing.quantity_available or "0")).quantize(
                Decimal("1"),
                rounding=ROUND_HALF_UP,
            )
        except (InvalidOperation, TypeError, ValueError):
            rounded_quantity = Decimal("1")

        listing.quantity_available = max(int(rounded_quantity), 1)
        listing.save(update_fields=["quantity_available"])


class Migration(migrations.Migration):

    dependencies = [
        ("market", "0025_merge_0024_marketcategory_image_icon_0024_structured_location_fields"),
    ]

    operations = [
        migrations.RunPython(round_farmer_listing_quantities, migrations.RunPython.noop),
        migrations.AlterField(
            model_name="farmermarketlisting",
            name="quantity_available",
            field=models.PositiveIntegerField(
                default=1,
                validators=[django.core.validators.MinValueValidator(1)],
            ),
        ),
    ]
