"""add user predictions tracking

Revision ID: add_user_predictions_tracking
Revises: 
Create Date: 2026-01-18 10:00:00.000000

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import sqlite

# revision identifiers, used by Alembic.
revision = 'add_user_predictions_tracking'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    """Create user_predictions table to track predictions viewed by users."""
    op.create_table(
        'user_predictions',
        sa.Column('id', sa.Integer(), primary_key=True, autoincrement=True),
        sa.Column('user_id', sa.Integer(), nullable=False),
        sa.Column('prediction_id', sa.Integer(), nullable=False),
        sa.Column('viewed_at', sa.DateTime(), nullable=False),
        sa.Column('was_correct', sa.Boolean(), nullable=True, comment='True if prediction was correct, False if incorrect, NULL if match not completed'),
        sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['prediction_id'], ['predictions.id'], ondelete='CASCADE'),
        sa.Index('idx_user_predictions_user_id', 'user_id'),
        sa.Index('idx_user_predictions_prediction_id', 'prediction_id'),
        sa.Index('idx_user_predictions_viewed_at', 'viewed_at'),
        sa.UniqueConstraint('user_id', 'prediction_id', name='uq_user_predictions_user_prediction')
    )
    
    # Create view timestamp in ISO format
    op.execute('''
        CREATE TRIGGER update_user_predictions_viewed_at 
        BEFORE INSERT ON user_predictions
        FOR EACH ROW
        BEGIN
            SELECT datetime('now') INTO NEW.viewed_at;
        END;
    ''')


def downgrade():
    """Drop user_predictions table."""
    op.execute('DROP TRIGGER IF EXISTS update_user_predictions_viewed_at')
    op.drop_table('user_predictions')
