"""prd010: add split_payment_request_id to invoices table."""
from typing import Union, Sequence
import sqlalchemy as sa
from alembic import op
from sqlalchemy.engine.reflection import Inspector

revision: str = "prd010_add_invoice_split_id"
down_revision: Union[str, Sequence[str], None] = "prd010_adj_late_fee_at"
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("invoices")}
    if "split_payment_request_id" not in existing_columns:
        op.add_column(
            "invoices",
            sa.Column("split_payment_request_id", sa.Integer(), nullable=True),
        )
        # Add FK only if it doesn't already exist
        existing_fks = [fk["name"] for fk in inspector.get_foreign_keys("invoices")]
        if "fk_invoices_split_payment_request_id" not in existing_fks:
            op.create_foreign_key(
                "fk_invoices_split_payment_request_id",
                "invoices",
                "split_payment_requests",
                ["split_payment_request_id"],
                ["id"],
            )
        op.create_index("ix_invoices_split_payment_request_id", "invoices", ["split_payment_request_id"])

def downgrade() -> None:
    op.drop_index("ix_invoices_split_payment_request_id", table_name="invoices")
    op.drop_constraint("fk_invoices_split_payment_request_id", "invoices", type_="foreignkey")
    op.drop_column("invoices", "split_payment_request_id")
