"""Add user profile fields (name, avatar, updated_at)

Revision ID: 026
Revises: 025
Create Date: 2026-07-05

补录用户资料字段。生产数据库已手动添加过这些字段，
因此 upgrade 做幂等检查，避免在已有字段的库上执行报错。
"""

import sqlalchemy as sa

from alembic import context, op

revision = "026"
down_revision = "025"
branch_labels = None
depends_on = None


def _column_exists(table: str, column: str) -> bool:
    if context.is_offline_mode():
        return False
    conn = op.get_bind()
    result = conn.execute(
        sa.text(
            "SELECT COUNT(*) FROM information_schema.columns " "WHERE table_name = :table AND column_name = :column"
        ),
        {"table": table, "column": column},
    )
    return result.scalar() > 0


def upgrade() -> None:
    if not _column_exists("users", "name"):
        op.add_column("users", sa.Column("name", sa.String(100), nullable=True))

    if not _column_exists("users", "avatar"):
        op.add_column("users", sa.Column("avatar", sa.String(500), nullable=True))

    if not _column_exists("users", "updated_at"):
        op.add_column(
            "users",
            sa.Column(
                "updated_at",
                sa.DateTime(),
                nullable=True,
                server_default=sa.func.now(),
            ),
        )


def downgrade() -> None:
    op.drop_column("users", "updated_at")
    op.drop_column("users", "avatar")
    op.drop_column("users", "name")
