"""Add preferences JSON column to User model

Revision ID: 5884eae7a65f
Revises: 134d1bb1eac5
Create Date: 2025-11-26 22:43:17.801325

"""
from alembic import op
import sqlalchemy as sa
import json

# revision identifiers, used by Alembic.
revision = '5884eae7a65f'
down_revision = '134d1bb1eac5'
branch_labels = None
depends_on = None


def upgrade():
    # Default preferences for existing users
    default_preferences = {
        'notifications': {
            'email_job_alerts': True,
            'email_applications': True,
            'email_contracts': True,
            'email_payments': True
        },
        'privacy': {
            'profile_public': True,
            'contact_info_visible': False,
            'rating_visible': True,
            'job_history_visible': True
        }
    }
    
    # Add column as nullable first
    with op.batch_alter_table('users', schema=None) as batch_op:
        batch_op.add_column(sa.Column('preferences', sa.JSON(), nullable=True))
    
    # Update existing users with default preferences
    # Convert dict to JSON string for PostgreSQL
    preferences_json = json.dumps(default_preferences)
    op.execute(
        f"UPDATE users SET preferences = '{preferences_json}'::jsonb WHERE preferences IS NULL"
    )
    
    # Make column non-nullable
    with op.batch_alter_table('users', schema=None) as batch_op:
        batch_op.alter_column('preferences', nullable=False)

    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('users', schema=None) as batch_op:
        batch_op.drop_column('preferences')

    # ### end Alembic commands ###
