"""scene backfill flag: exclude bulk catalog imports from "new"

Revision ID: 0026_scene_backfill_flag
Revises: 0025_source_ranking
Create Date: 2026-07-02

Tube'y podają datę importu jako release_date, więc masowy backfill starego katalogu
(deep-crawl głębokie strony) udawał świeżość i zawyżał licznik "+N nowych" w ulubionych.
`scenes.backfill` oznacza takie sceny (pozostają widoczne, ale nie liczą się jako nowe).
Dodatkowo indeks na scene_performers(performer_id) pod zapytanie licznika ulubionych
(PK to (scene_id, performer_id), więc filtr po samym performer_id był full scanem).

Idempotentne (IF NOT EXISTS): prod dostał kolumnę/indeksy ręcznym ALTER-em zanim ta
migracja powstała, a deploy nie odpala alembic; guard chroni przed DuplicateColumn gdyby
`alembic upgrade` puszczono na prodzie albo na dumpie z prod.
"""
from collections.abc import Sequence

from alembic import op

revision: str = "0026_scene_backfill_flag"
down_revision: str | None = "0025_source_ranking"
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None


def upgrade() -> None:
    op.execute(
        "ALTER TABLE scenes ADD COLUMN IF NOT EXISTS backfill boolean NOT NULL DEFAULT false"
    )
    op.execute("CREATE INDEX IF NOT EXISTS ix_scenes_backfill ON scenes (backfill)")
    op.execute(
        "CREATE INDEX IF NOT EXISTS ix_scene_performers_performer_id "
        "ON scene_performers (performer_id)"
    )


def downgrade() -> None:
    op.execute("DROP INDEX IF EXISTS ix_scene_performers_performer_id")
    op.execute("DROP INDEX IF EXISTS ix_scenes_backfill")
    op.execute("ALTER TABLE scenes DROP COLUMN IF EXISTS backfill")
