# Data migration helper — populate category from activity_type on existing logs
from django.db import migrations, models


def populate_categories(apps, schema_editor):
    DailyDiaryLog = apps.get_model("shop_management", "DailyDiaryLog")
    mapping = {
        "manual": "manual",
        "purchase": "purchase",
        "sale": "sale",
        "quotation": "quotation",
        "sale_payment": "receivable",
        "customer_payment": "receivable",
        "passive_income": "receivable",
        "purchase_payment": "payable",
        "supplier_payment": "payable",
        "customer_debtor": "payable",
        "expense": "payable",
        "payroll": "payable",
        "advance": "payable",
        "account_transfer": "payable",
        "stock_transfer": "stock",
        "sale_return": "return",
        "purchase_return": "return",
    }
    for log in DailyDiaryLog.objects.all().iterator():
        log.category = mapping.get(log.activity_type, "manual")
        log.save(update_fields=["category"])


class Migration(migrations.Migration):
    dependencies = [
        ("shop_management", "0078_daily_diary_log"),
    ]

    operations = [
        migrations.AddField(
            model_name="dailydiarylog",
            name="category",
            field=models.CharField(
                choices=[
                    ("sale", "Sale"),
                    ("purchase", "Purchase"),
                    ("receivable", "Receivable Payment"),
                    ("payable", "Payable Payment"),
                    ("quotation", "Quotation"),
                    ("stock", "Stock"),
                    ("return", "Return"),
                    ("manual", "Manual"),
                ],
                db_index=True,
                default="manual",
                max_length=32,
            ),
        ),
        migrations.RunPython(populate_categories, migrations.RunPython.noop),
    ]
