"""Manually add RBAC fields

Revision ID: # METTEZ ICI LE NOUVEL ID GÉNÉRÉ PAR LA COMMANDE
Revises: 
Create Date: 2025-09-26 15:00:00.000000

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
# Remplacez 'xxxxxxxxxxxx' par le nouvel ID de votre nom de fichier
revision = 'f7ca393a0af4'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    
    # Étape 1: Ajouter la colonne 'role' à la table 'user', en la permettant d'être nulle temporairement
    op.add_column('user', sa.Column('role', sa.String(length=20), nullable=True))
    
    # Étape 2: Mettre à jour les données existantes
    op.execute("UPDATE \"user\" SET role = 'admin' WHERE username = 'admin'")
    op.execute("UPDATE \"user\" SET role = 'manager' WHERE role IS NULL")
    
    # Étape 3: Rendre la colonne 'role' non-nulle
    op.alter_column('user', 'role', nullable=False)

    # Étape 4: Ajouter la colonne 'commercial_id' et la clé étrangère aux tables clients
    for i in range(1, 6):
        table_name = f'gallery{i}_clients'
        op.add_column(table_name, sa.Column('commercial_id', sa.Integer(), nullable=True))
        op.create_foreign_key(
            f'fk_{table_name}_commercial_id_user',
            table_name, 'user',
            ['commercial_id'], ['id']
        )
    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    
    # Inverse les opérations pour les tables clients
    for i in range(1, 6):
        table_name = f'gallery{i}_clients'
        op.drop_constraint(f'fk_{table_name}_commercial_id_user', table_name, type_='foreignkey')
        op.drop_column(table_name, 'commercial_id')

    # Inverse les opérations pour la table user
    op.drop_column('user', 'role')
    # ### end Alembic commands ###
