"""high-priority integrity constraints and capacity indexes

Revision ID: 0003_high_priority_integrity
Revises: 0002_hnsw_index
Create Date: 2026-02-22
"""

from collections.abc import Sequence

import sqlalchemy as sa

from alembic import op

revision: str = "0003_high_priority_integrity"
down_revision: str | None = "0002_hnsw_index"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    op.add_column("conversation", sa.Column("identity_key", sa.String(), nullable=True))
    op.execute("UPDATE conversation SET identity_key = id WHERE identity_key IS NULL")
    op.alter_column("conversation", "identity_key", nullable=False)
    op.create_unique_constraint(
        "uq_conversation_restaurant_identity_key",
        "conversation",
        ["restaurant_id", "identity_key"],
    )

    op.create_index(
        "ix_reservation_restaurant_status_reserved_at",
        "reservation",
        ["restaurant_id", "status", "reserved_at"],
        unique=False,
    )


def downgrade() -> None:
    op.drop_index("ix_reservation_restaurant_status_reserved_at", table_name="reservation")
    op.drop_constraint(
        "uq_conversation_restaurant_identity_key",
        "conversation",
        type_="unique",
    )
    op.drop_column("conversation", "identity_key")
