"""Add reversal lifecycle to PaymentBatch + DisbursementExecution.

P0 (RIMS assessment §3 #8 / SRS §5.4 FRFM044) — finance had no undo path for
batches that posted to the bank but bounced (NSF, account closed, operator
mistake). CANCELLED was unreachable from EXECUTED. Add REVERSED on both
PaymentBatch and DisbursementExecution plus the chargeback metadata.
"""

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


class Migration(migrations.Migration):

    dependencies = [
        ("rims_finance", "0007_disbursement_payment_receipts"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.AlterField(
            model_name="paymentbatch",
            name="status",
            field=models.CharField(
                choices=[
                    ("draft", "Draft"),
                    ("locked", "Locked"),
                    ("executed", "Executed"),
                    ("cancelled", "Cancelled"),
                    ("reversed", "Reversed"),
                ],
                db_index=True,
                default="draft",
                max_length=16,
            ),
        ),
        migrations.AddField(
            model_name="paymentbatch",
            name="reversed_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="paymentbatch",
            name="reversed_by",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="payment_batches_reversed",
                to=settings.AUTH_USER_MODEL,
            ),
        ),
        migrations.AddField(
            model_name="paymentbatch",
            name="reversal_reason",
            field=models.TextField(blank=True),
        ),
        migrations.AddField(
            model_name="paymentbatch",
            name="reversal_reference",
            field=models.CharField(
                blank=True,
                help_text="Bank chargeback / reversal reference returned by the platform.",
                max_length=96,
            ),
        ),
        migrations.AlterField(
            model_name="disbursementexecution",
            name="status",
            field=models.CharField(
                choices=[
                    ("scheduled", "Scheduled"),
                    ("executed", "Executed"),
                    ("rescheduled", "Rescheduled"),
                    ("failed", "Failed"),
                    ("reversed", "Reversed"),
                ],
                default="scheduled",
                max_length=16,
            ),
        ),
        migrations.AddField(
            model_name="disbursementexecution",
            name="reversed_at",
            field=models.DateTimeField(blank=True, null=True),
        ),
        migrations.AddField(
            model_name="disbursementexecution",
            name="reversal_reference",
            field=models.CharField(blank=True, max_length=96),
        ),
        migrations.AddField(
            model_name="disbursementexecution",
            name="reversal_reason",
            field=models.TextField(blank=True),
        ),
    ]
