"""drop legacy agent OTP fields

Revision ID: 026_drop_agent_otp_legacy
Revises: 025_messages_id_uuid
Create Date: 2026-06-22

v0.7.1: 清理 v0.5.6 引入的 otp_secret / otp_enabled 双字段
原因: 旧 OTP 字段只用于高危操作前的二次验证,mfa_secret/mfa_enabled(migration 023)
      已涵盖该用途。两个字段名不同导致 v0.7.0 生产报错:
      column agents.otp_secret does not exist(alembic 010 之前没在生产跑过)

策略: 用 IF EXISTS 兼容"列不存在"情况(因为生产数据库可能从来没建过这列)
      DROP COLUMN 不会破坏生产 — mfa_secret 是新的生产字段,otp_secret 只是历史遗留

下游: agents.py / admin_api.py 改用 mfa_secret/mfa_enabled
      Agent 模型删 otp_secret/otp_enabled 字段

回退: 此 migration 的 downgrade 重新添加 otp_secret/otp_enabled
      如果生产用过 OTP 的话要回退(目前 IT 支持服务未正式上线,无此风险)
"""
from alembic import op
import sqlalchemy as sa


# revision identifiers
revision = '026_drop_agent_otp_legacy'
down_revision = '025_messages_id_uuid'
branch_labels = None
depends_on = None


def upgrade() -> None:
    """删除 legacy OTP 字段(IF EXISTS 兼容列不存在的场景)。"""
    op.execute("ALTER TABLE agents DROP COLUMN IF EXISTS otp_secret")
    op.execute("ALTER TABLE agents DROP COLUMN IF EXISTS otp_enabled")


def downgrade() -> None:
    """回退: 重新添加 legacy OTP 字段。"""
    op.add_column(
        'agents',
        sa.Column(
            'otp_secret',
            sa.String(64),
            nullable=True,
            comment='TOTP 密钥（base32,绑定时生成）'
        )
    )
    op.add_column(
        'agents',
        sa.Column(
            'otp_enabled',
            sa.Boolean(),
            nullable=False,
            server_default=sa.text('false'),
            comment='是否启用 OTP 二次验证'
        )
    )
