"""Add product_releases table and attach_latest_module flag on predefined_messages.

Revision ID: pr001
Revises: infra001
Create Date: 2026-05-05
"""
from alembic import op
import sqlalchemy as sa

revision = 'pr001'
down_revision = 'infra001'
branch_labels = None
depends_on = None


def upgrade():
    op.create_table(
        'product_releases',
        sa.Column('id', sa.Integer(), primary_key=True, autoincrement=True),
        sa.Column('product_id', sa.Integer(), sa.ForeignKey('addons_products.id', ondelete='CASCADE'), nullable=False, index=True),
        sa.Column('version', sa.String(50), nullable=True),
        sa.Column('original_filename', sa.String(255), nullable=False),
        sa.Column('stored_filename', sa.String(255), nullable=False),
        sa.Column('file_path', sa.String(512), nullable=False),
        sa.Column('file_size', sa.Integer(), nullable=False, server_default='0'),
        sa.Column('is_latest', sa.Boolean(), nullable=False, server_default='false'),
        sa.Column('uploaded_at', sa.DateTime(), nullable=False, server_default=sa.text('NOW()')),
    )

    # Guard: add attach_latest_module only if missing
    conn = op.get_bind()
    result = conn.execute(sa.text(
        "SELECT 1 FROM information_schema.columns "
        "WHERE table_schema = current_schema() "
        "AND table_name = 'predefined_messages' "
        "AND column_name = 'attach_latest_module'"
    )).fetchone()
    if not result:
        op.add_column('predefined_messages',
            sa.Column('attach_latest_module', sa.Boolean(), nullable=False, server_default='false'))


def downgrade():
    op.drop_table('product_releases')
    op.drop_column('predefined_messages', 'attach_latest_module')
