"""live YouTube search: provenance flags

Revision ID: 0028_live_search_provenance
Revises: 0027_message_e2ee
Create Date: 2026-06-29

Adds provenance flags so videos (and channels) that entered the catalog only because a live
YouTube search surfaced them can be told apart from organically-synced content and hidden from
the Library by default:
  - videos.via_search      — this video first arrived via search
  - channels.from_search   — this channel exists only because search surfaced one of its videos
Both default false (every existing row is organic), indexed for the feed's exclude filter.
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

revision: str = "0028_live_search_provenance"
down_revision: Union[str, None] = "0027_message_e2ee"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.add_column(
        "videos",
        sa.Column(
            "via_search", sa.Boolean(), nullable=False, server_default="false"
        ),
    )
    op.create_index("ix_videos_via_search", "videos", ["via_search"])
    op.add_column(
        "channels",
        sa.Column(
            "from_search", sa.Boolean(), nullable=False, server_default="false"
        ),
    )
    op.create_index("ix_channels_from_search", "channels", ["from_search"])


def downgrade() -> None:
    op.drop_index("ix_channels_from_search", table_name="channels")
    op.drop_column("channels", "from_search")
    op.drop_index("ix_videos_via_search", table_name="videos")
    op.drop_column("videos", "via_search")
