"""RBAC 001 - Create roles table (was never created by a prior migration)

PRD-008 RBAC — Migration 1 of 7

Creates the roles table with all RBAC fields:
  - id, label, slug (unique+indexed), description
  - is_default, is_system, role_rank
  - created_at, merchant_id FK, created_by_id FK (nullable)

Revision ID: rbac001a2b3c4d
Revises: cf8fd1534e98
Create Date: 2026-03-19 00:00:01.000000

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = 'rbac001a2b3c4d'
down_revision: Union[str, Sequence[str], None] = 'cf8fd1534e98'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
    op.create_table(
        'roles',
        sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
        sa.Column('label', sa.Text(), nullable=True),
        sa.Column('slug', sa.Text(), nullable=True),
        sa.Column('description', sa.Text(), nullable=True),
        sa.Column('is_default', sa.Boolean(), nullable=False, server_default=sa.text('false')),
        sa.Column('is_system', sa.Boolean(), nullable=False, server_default=sa.text('false')),
        sa.Column('role_rank', sa.Integer(), nullable=False, server_default=sa.text('1')),
        sa.Column('created_at', sa.DateTime(), server_default=sa.text('now()'), nullable=True),
        sa.Column('merchant_id', sa.Integer(), sa.ForeignKey('merchants.id'), nullable=True),
        sa.Column('created_by_id', sa.Integer(), sa.ForeignKey('users.id'), nullable=True),
        sa.PrimaryKeyConstraint('id'),
    )
    op.create_index('ix_roles_id', 'roles', ['id'], unique=False)
    op.create_index('ix_roles_slug', 'roles', ['slug'], unique=True)
    op.create_unique_constraint('uq_roles_slug', 'roles', ['slug'])


def downgrade() -> None:
    op.drop_constraint('uq_roles_slug', 'roles', type_='unique')
    op.drop_index('ix_roles_slug', table_name='roles')
    op.drop_index('ix_roles_id', table_name='roles')
    op.drop_table('roles')
