"""Add conversation session metadata fields.

Revision ID: 0012_add_conversation_session_metadata
Revises: 0011_add_common_question_table
Create Date: 2026-02-25
"""

from collections.abc import Sequence

import sqlalchemy as sa
import sqlmodel

from alembic import op

revision: str = "0012_add_conversation_session_metadata"
down_revision: str | None = "0011_add_common_question_table"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    op.add_column("conversation", sa.Column("ended_at", sa.DateTime(), nullable=True))
    op.add_column(
        "conversation",
        sa.Column("message_count", sa.Integer(), nullable=False, server_default=sa.text("0")),
    )
    op.add_column("conversation", sa.Column("last_message_preview", sa.Text(), nullable=True))
    op.add_column("conversation", sa.Column("last_message_at", sa.DateTime(), nullable=True))
    op.add_column(
        "conversation",
        sa.Column("last_agent_type", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
    )

    op.create_index(
        "ix_conversation_restaurant_started",
        "conversation",
        ["restaurant_id", sa.text("created_at DESC")],
        unique=False,
    )
    op.create_index(
        "ix_conversation_restaurant_channel",
        "conversation",
        ["restaurant_id", "channel"],
        unique=False,
    )
    op.create_index(
        "ix_conversation_restaurant_agent",
        "conversation",
        ["restaurant_id", "last_agent_type"],
        unique=False,
    )


def downgrade() -> None:
    op.drop_index("ix_conversation_restaurant_agent", table_name="conversation")
    op.drop_index("ix_conversation_restaurant_channel", table_name="conversation")
    op.drop_index("ix_conversation_restaurant_started", table_name="conversation")
    op.drop_column("conversation", "last_agent_type")
    op.drop_column("conversation", "last_message_at")
    op.drop_column("conversation", "last_message_preview")
    op.drop_column("conversation", "message_count")
    op.drop_column("conversation", "ended_at")
