"""Персональные MCP-токены (mcp_) — доступ к /mcp по роли владельца

Revision ID: c9a2d6e71f43
Revises: b7d3e8f04a92
Create Date: 2026-10-04
"""

from alembic import op
import sqlalchemy as sa


revision = "c9a2d6e71f43"
down_revision = "b7d3e8f04a92"
branch_labels = None
depends_on = None


def upgrade() -> None:
    op.create_table(
        "mcp_tokens",
        sa.Column("id", sa.Integer(), primary_key=True),
        # sub gnexus-auth владельца: выпуск только себе (авторизован владелец)
        sa.Column("user_id", sa.String(64), nullable=False),
        sa.Column("name", sa.String(120), nullable=False),
        # снейпшоты выпуска — для списков владельца и админа
        sa.Column("user_email", sa.String(255), nullable=True),
        sa.Column("system_role", sa.String(16), nullable=False),
        sa.Column("token_hash", sa.String(64), nullable=False),
        sa.Column("token_hint", sa.String(8), nullable=False),
        sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.func.now(), nullable=False),
        sa.Column("last_used_at", sa.DateTime(timezone=True), nullable=True),
        sa.Column("revoked_at", sa.DateTime(timezone=True), nullable=True),
    )
    op.create_index("ix_mcp_tokens_user_id", "mcp_tokens", ["user_id"])
    # уникальность хэша сама не даёт частичный индекс не нужен:
    # отозванный хэш остаётся в таблице (история ключей), коллизий нет
    op.create_unique_constraint("uq_mcp_tokens_token_hash", "mcp_tokens", ["token_hash"])


def downgrade() -> None:
    op.drop_table("mcp_tokens")