"""maquina.categoria: 'maquina' | 'outro' (elemento de custo "Outros")

Revision ID: d7a2b4c8e391
Revises: c6d1a9e3b275
Create Date: 2026-10-30 12:00:00.000000

"Outros" é um elemento de custo como a máquina (centro de custo, classificação, horas úteis, gastos), alocado por
direcionador; usa a mesma tabela, distinguida por `categoria`. Só roda nos schemas de Planejamento (ver f1a9c3d7e284).
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op


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


def _no_schema_comum() -> bool:
    contexto = op.get_context()
    return contexto.dialect.name == 'postgresql' and contexto.version_table_schema is None


def upgrade() -> None:
    if _no_schema_comum():
        return
    with op.batch_alter_table('maquina') as lote:
        lote.add_column(sa.Column('categoria', sa.String(length=10), nullable=False, server_default='maquina'))
        lote.create_check_constraint('ck_maquina_categoria', "categoria in ('maquina', 'outro')")
    op.add_column('custeio_produto', sa.Column('custo_outros', sa.Numeric(14, 6), server_default='0', nullable=False))


def downgrade() -> None:
    if _no_schema_comum():
        return
    op.drop_column('custeio_produto', 'custo_outros')
    with op.batch_alter_table('maquina') as lote:
        lote.drop_constraint('ck_maquina_categoria', type_='check')
        lote.drop_column('categoria')
