"""custeio: ociosidade por tipo de elemento, volume e rendimento por produto; ociosidade não alocada na execução

Revision ID: e8d3a5b7c1f9
Revises: d7a2b4c8e391
Create Date: 2026-10-30 18:00:00.000000

Só roda nos schemas de Planejamento (ver f1a9c3d7e284). Execuções antigas ficam com 0/NULL nas colunas novas.
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op


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

OCIOSIDADES = ('ociosidade_maquina', 'ociosidade_ambiente', 'ociosidade_mao_de_obra', 'ociosidade_outros')


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
    for coluna in OCIOSIDADES:
        op.add_column('custeio_produto', sa.Column(coluna, sa.Numeric(14, 6), server_default='0', nullable=False))
    op.add_column('custeio_produto', sa.Column('volume_producao', sa.Numeric(14, 6), nullable=True))
    op.add_column('custeio_produto', sa.Column('rendimento', sa.Numeric(14, 6), nullable=True))
    op.add_column('custeio_execucao', sa.Column('ociosidade_nao_alocada', sa.Numeric(14, 6), server_default='0', nullable=False))


def downgrade() -> None:
    if _no_schema_comum():
        return
    op.drop_column('custeio_execucao', 'ociosidade_nao_alocada')
    op.drop_column('custeio_produto', 'rendimento')
    op.drop_column('custeio_produto', 'volume_producao')
    for coluna in reversed(OCIOSIDADES):
        op.drop_column('custeio_produto', coluna)
