"""autoria (quem digitou/alterou) nas versoes de custo e nos custeios + log de atividade

Revision ID: d9e1a4b7c352
Revises: c4d8e2f61a93
Create Date: 2026-10-20 15:00:00.000000

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


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

# Mesmas tabelas de `historico.TRACKED`. Linhas existentes ficam sem autor (NULL = anterior ao registro).
TABELAS_VERSIONADAS = [
    'ambiente_gasto',
    'maquina_gasto',
    'funcionario_gasto',
    'insumo',
    'funcionario',
    'maquina',
    'ambiente',
    'produto',
    'roteiro_maquina',
    'roteiro_ambiente',
    'roteiro_mao_de_obra',
    'roteiro_insumo',
]


def upgrade() -> None:
    for tabela in TABELAS_VERSIONADAS:
        op.add_column(tabela, sa.Column('digitado_por', sa.String(length=200), nullable=True))
        op.add_column(tabela, sa.Column('digitado_em', sa.DateTime(), nullable=True))
    op.add_column('historico_versao', sa.Column('autor', sa.String(length=200), nullable=True))
    op.add_column('historico_versao', sa.Column('digitado_em', sa.DateTime(), nullable=True))
    op.add_column('historico_versao', sa.Column('substituido_por', sa.String(length=200), nullable=True))
    op.add_column('custeio_execucao', sa.Column('executado_por', sa.String(length=200), nullable=True))
    op.create_table(
        'registro_atividade',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('quando', sa.DateTime(), nullable=False),
        sa.Column('usuario', sa.String(length=200), nullable=False),
        sa.Column('metodo', sa.String(length=10), nullable=False),
        sa.Column('acao', sa.String(length=60), nullable=False),
        sa.Column('recurso', sa.String(length=60), nullable=False),
        sa.Column('caminho', sa.String(length=300), nullable=False),
        sa.PrimaryKeyConstraint('id'),
    )
    op.create_index(op.f('ix_registro_atividade_quando'), 'registro_atividade', ['quando'], unique=False)


def downgrade() -> None:
    op.drop_index(op.f('ix_registro_atividade_quando'), table_name='registro_atividade')
    op.drop_table('registro_atividade')
    op.drop_column('custeio_execucao', 'executado_por')
    for coluna in ('substituido_por', 'digitado_em', 'autor'):
        op.drop_column('historico_versao', coluna)
    for tabela in reversed(TABELAS_VERSIONADAS):
        op.drop_column(tabela, 'digitado_em')
        op.drop_column(tabela, 'digitado_por')
