"""add subscription billing incident holds

Revision ID: e2a6c8f14b73
Revises: d7f3b5a8c921
Create Date: 2026-08-15 21:30:00
"""

from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


revision: str = "e2a6c8f14b73"
down_revision: Union[str, Sequence[str], None] = "d7f3b5a8c921"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    with op.batch_alter_table("subscriptions") as batch_op:
        batch_op.add_column(
            sa.Column("billing_hold_status", sa.String(length=32), nullable=True)
        )
        batch_op.add_column(
            sa.Column(
                "billing_hold_provider_id",
                sa.String(length=256),
                nullable=True,
            )
        )
        batch_op.add_column(
            sa.Column(
                "billing_hold_event_created_at",
                sa.DateTime(timezone=True),
                nullable=True,
            )
        )
        batch_op.create_check_constraint(
            "ck_subscriptions_billing_hold",
            "billing_hold_status IS NULL OR billing_hold_status IN "
            "('dispute_open', 'dispute_lost', 'refunded')",
        )


def downgrade() -> None:
    with op.batch_alter_table("subscriptions") as batch_op:
        batch_op.drop_constraint(
            "ck_subscriptions_billing_hold",
            type_="check",
        )
        batch_op.drop_column("billing_hold_event_created_at")
        batch_op.drop_column("billing_hold_provider_id")
        batch_op.drop_column("billing_hold_status")
