"""prd010: add late_fee_applied_at to invoice_adjustments table.

Records the exact timestamp when a late fee was applied to an invoice
adjustment, enabling idempotent late-fee application and audit trail
for the Payment Scheduler dunning workflow.

Revision ID: prd010_adj_late_fee_at
Revises: prd010_invoice_dunning_fields
Create Date: 2026-04-22
"""
from typing import Union, Sequence

import sqlalchemy as sa
from alembic import op
from sqlalchemy.engine.reflection import Inspector


revision: str = "prd010_adj_late_fee_at"
down_revision: Union[str, Sequence[str], None] = "prd010_invoice_dunning_fields"
branch_labels = None
depends_on = None


def upgrade() -> None:
    bind = op.get_bind()
    inspector = Inspector.from_engine(bind)

    existing_columns = {
        col["name"] for col in inspector.get_columns("invoice_adjustments")
    }

    if "late_fee_applied_at" not in existing_columns:
        op.add_column(
            "invoice_adjustments",
            sa.Column("late_fee_applied_at", sa.DateTime(), nullable=True),
        )


def downgrade() -> None:
    op.drop_column("invoice_adjustments", "late_fee_applied_at")
