"""Add rewarded_ad_events analytics table

Append-only event stream for rewarded-advertisement analytics (impressions, video
playback, reward grants/rejections). Mirrors the listing_views event-table pattern.

Revision ID: d8f0b2c4e6a9
Revises: c7e9a1b3d5f8
Create Date: 2026-07-06

"""

import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = "d8f0b2c4e6a9"
down_revision = "c7e9a1b3d5f8"
branch_labels = None
depends_on = None

_BIGINT = sa.BigInteger().with_variant(sa.Integer(), "sqlite")


def upgrade():
    op.create_table(
        "rewarded_ad_events",
        sa.Column("id", _BIGINT, autoincrement=True, nullable=False),
        sa.Column("advertisement_id", _BIGINT, nullable=True),
        sa.Column("user_id", _BIGINT, nullable=True),
        sa.Column("event_type", sa.String(length=32), nullable=False),
        sa.Column("reason", sa.String(length=32), nullable=True),
        sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
        sa.ForeignKeyConstraint(["advertisement_id"], ["advertisements.id"]),
        sa.ForeignKeyConstraint(["user_id"], ["users.id"]),
        sa.PrimaryKeyConstraint("id"),
    )
    with op.batch_alter_table("rewarded_ad_events", schema=None) as batch_op:
        batch_op.create_index("ix_rewarded_ad_events_advertisement_id", ["advertisement_id"], unique=False)
        batch_op.create_index("ix_rewarded_ad_events_event_type", ["event_type"], unique=False)
        batch_op.create_index("ix_rewarded_ad_events_created_at", ["created_at"], unique=False)


def downgrade():
    with op.batch_alter_table("rewarded_ad_events", schema=None) as batch_op:
        batch_op.drop_index("ix_rewarded_ad_events_created_at")
        batch_op.drop_index("ix_rewarded_ad_events_event_type")
        batch_op.drop_index("ix_rewarded_ad_events_advertisement_id")
    op.drop_table("rewarded_ad_events")
