"""Simplify boost consumable - make it one-time instead of timed

Revision ID: 025_simplify_boost
Revises: 024_seed_shop_items
Create Date: 2026-01-08

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa
from sqlalchemy import inspect


# revision identifiers, used by Alembic.
revision: str = '025_simplify_boost'
down_revision: Union[str, None] = '024_seed_shop_items'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def column_exists(table_name: str, column_name: str) -> bool:
    bind = op.get_bind()
    inspector = inspect(bind)
    columns = [c['name'] for c in inspector.get_columns(table_name)]
    return column_name in columns


def upgrade() -> None:
    # Add new boolean column for one-time boost
    if not column_exists('participants', 'has_active_boost'):
        op.add_column('participants', sa.Column('has_active_boost', sa.Boolean(), nullable=False, server_default='false'))

    # Remove old timed boost columns
    if column_exists('participants', 'active_boost_multiplier'):
        op.drop_column('participants', 'active_boost_multiplier')

    if column_exists('participants', 'active_boost_expires_at'):
        op.drop_column('participants', 'active_boost_expires_at')


def downgrade() -> None:
    # Restore old columns
    if not column_exists('participants', 'active_boost_multiplier'):
        op.add_column('participants', sa.Column('active_boost_multiplier', sa.Float(), nullable=True))

    if not column_exists('participants', 'active_boost_expires_at'):
        op.add_column('participants', sa.Column('active_boost_expires_at', sa.DateTime(), nullable=True))

    # Remove new column
    if column_exists('participants', 'has_active_boost'):
        op.drop_column('participants', 'has_active_boost')
