"""ml_settings: video tagging knobs (cadence sampling + noise floor)

#747. Video tag quality/perf: sample frames at a fixed cadence (interval) so a
tag's frame-presence reflects real screen time, cap total frames so long videos
stay bounded, and keep a tag only if it appears in >= min_tag_frames sampled
frames. Operator-tunable via Settings → ML (replaces the VIDEO_ML_FRAMES env var).

Revision ID: 0053
Revises: 0052
Create Date: 2026-06-16
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op

revision: str = "0053"
down_revision: Union[str, None] = "0052"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.add_column(
        "ml_settings",
        sa.Column(
            "video_frame_interval_seconds", sa.Float(), nullable=False,
            server_default="4.0",
        ),
    )
    op.add_column(
        "ml_settings",
        sa.Column(
            "video_max_frames", sa.Integer(), nullable=False, server_default="64",
        ),
    )
    op.add_column(
        "ml_settings",
        sa.Column(
            "video_min_tag_frames", sa.Integer(), nullable=False,
            server_default="3",
        ),
    )


def downgrade() -> None:
    op.drop_column("ml_settings", "video_min_tag_frames")
    op.drop_column("ml_settings", "video_max_frames")
    op.drop_column("ml_settings", "video_frame_interval_seconds")
