"""add media fields to messages table

为消息表添加媒体文件相关字段，支持图片、语音、文件等非文本消息。

新增字段：
- media_id: 企微媒体文件ID（3天有效）
- media_url: 本地存储的媒体文件URL
- file_name: 文件名
- file_size: 文件大小（字节）
- extra_data: 扩展元数据（JSON）

Revision ID: 002_media_fields
Revises: 6d5520491644
Create Date: 2026-06-03 17:30:00.000000
"""

from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '002_media_fields'
down_revision = '6d5520491644'
branch_labels = None
depends_on = None


def upgrade() -> None:
    """添加媒体文件相关字段到 messages 表。"""
    # 企微媒体文件ID（图片/语音/视频消息携带，3天有效）
    op.add_column('messages', sa.Column('media_id', sa.String(256), nullable=True, comment='企微媒体文件ID（3天有效）'))
    # 本地存储的媒体文件URL（下载后保存到服务器/NAS的访问路径）
    op.add_column('messages', sa.Column('media_url', sa.String(512), nullable=True, comment='本地存储的媒体文件URL'))
    # 文件名（文件消息携带）
    op.add_column('messages', sa.Column('file_name', sa.String(256), nullable=True, comment='文件名'))
    # 文件大小（字节）
    op.add_column('messages', sa.Column('file_size', sa.Integer(), nullable=True, comment='文件大小（字节）'))
    # 扩展元数据（JSON格式，存储各消息类型的额外信息）
    op.add_column('messages', sa.Column('extra_data', sa.JSON(), nullable=True, comment='扩展元数据（JSON）'))


def downgrade() -> None:
    """移除媒体文件相关字段。"""
    op.drop_column('messages', 'extra_data')
    op.drop_column('messages', 'file_size')
    op.drop_column('messages', 'file_name')
    op.drop_column('messages', 'media_url')
    op.drop_column('messages', 'media_id')
