"""tour_progress: per-person, per-board tool-tour state

Revision ID: 8b3d1f5a2c47
Revises: 2111c624e7d2
Create Date: 2026-09-01

The tool walkthrough's CONTENT lives in the frontend as versioned data; only
"has this person been walked through this board, and at what version" is
server state. See app.models.TourProgress.
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

revision: str = '8b3d1f5a2c47'
down_revision: Union[str, Sequence[str], None] = '2111c624e7d2'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.create_table(
        'tour_progress',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('instance_id', sa.String(length=64), nullable=False),
        sa.Column('username', sa.String(length=64), nullable=False),
        sa.Column('seen_version', sa.Integer(), nullable=False),
        sa.Column('completed', sa.Boolean(), nullable=False),
        sa.Column('updated_at', sa.DateTime(timezone=True), nullable=False),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('instance_id', 'username', name='uq_tour_progress_who'),
    )
    op.create_index(op.f('ix_tour_progress_instance_id'), 'tour_progress',
                    ['instance_id'], unique=False)
    op.create_index(op.f('ix_tour_progress_username'), 'tour_progress',
                    ['username'], unique=False)


def downgrade() -> None:
    op.drop_index(op.f('ix_tour_progress_username'), table_name='tour_progress')
    op.drop_index(op.f('ix_tour_progress_instance_id'), table_name='tour_progress')
    op.drop_table('tour_progress')
