"""Comments can attach to a feature-board card as well as a discussion item.

Exactly one target per comment, enforced in the database.

Revision ID: f8a9b0c1d2e3
Revises: e7f8a9b0c1d2
Create Date: 2026-08-26
"""

import sqlalchemy as sa

from alembic import op

revision = "f8a9b0c1d2e3"
down_revision = "e7f8a9b0c1d2"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.alter_column("discussion_comments", "item_id", existing_type=sa.Integer(), nullable=True)
    op.add_column("discussion_comments", sa.Column("feature_key", sa.String(64), nullable=True))
    op.create_index(
        "ix_discussion_comments_feature_key", "discussion_comments", ["feature_key"]
    )
    op.create_check_constraint(
        "ck_comment_one_target",
        "discussion_comments",
        "(item_id IS NULL) <> (feature_key IS NULL)",
    )


def downgrade() -> None:
    op.drop_constraint("ck_comment_one_target", "discussion_comments")
    op.drop_index("ix_discussion_comments_feature_key", table_name="discussion_comments")
    op.drop_column("discussion_comments", "feature_key")
    op.alter_column("discussion_comments", "item_id", existing_type=sa.Integer(), nullable=False)
