"""Add Stripe fulfillment identifiers to domain orders."""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

revision = "204"
down_revision = "203"
branch_labels = None
depends_on = None

def upgrade():
    op.add_column("domain_orders", sa.Column("stripe_checkout_session_id", sa.String(100), nullable=True))
    op.add_column("domain_orders", sa.Column("stripe_subscription_id", sa.String(100), nullable=True))
    op.add_column("domain_orders", sa.Column("stripe_price_id", sa.String(100), nullable=True))
    op.add_column("domain_orders", sa.Column("renewal_failure_count", sa.Integer(), nullable=False, server_default="0"))
    op.add_column("domain_orders", sa.Column("metadata_json", postgresql.JSONB(), nullable=False, server_default=sa.text("'{}'::jsonb")))
    op.create_index("uq_domain_orders_checkout_session", "domain_orders", ["stripe_checkout_session_id"], unique=True)
    op.create_index("uq_domain_orders_subscription", "domain_orders", ["stripe_subscription_id"], unique=True)

def downgrade():
    op.drop_index("uq_domain_orders_subscription", table_name="domain_orders")
    op.drop_index("uq_domain_orders_checkout_session", table_name="domain_orders")
    op.drop_column("domain_orders", "renewal_failure_count")
    op.drop_column("domain_orders", "stripe_price_id")
    op.drop_column("domain_orders", "stripe_subscription_id")
    op.drop_column("domain_orders", "stripe_checkout_session_id")
    op.drop_column("domain_orders", "metadata_json")
