"""exclui o legado por Centro de Resultados (Regra de Margem, Tabela de Preço) e as fotos antigas do Planejamento

Revision ID: b8d0f2a4c6e8
Revises: a7c9e1b3d5f6
Create Date: 2026-11-07 10:00:00.000000

A Meta de Lucro passou a ser única (`meta_lucro`) e o preço de cada Centro é calculado pelo motor (`preco_primario`, `preco_centro`): as tabelas
`regra_de_margem` e `tabela_de_preco` saem dos schemas de Planejamento. As fotos antigas (`planejamento_versao`, do schema comum) tinham os números
no formato antigo (DRE/Destinação por Centro) e também são apagadas; a numeração das versões não volta (`planejamento.ultima_versao`). O downgrade só
recria as tabelas, vazias. No SQLite (testes) tudo roda de uma vez.
"""
from typing import Sequence, Union

import sqlalchemy as sa
from alembic import op


# revision identifiers, used by Alembic.
revision: str = 'b8d0f2a4c6e8'
down_revision: Union[str, None] = 'a7c9e1b3d5f6'
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:
    liga = op.get_bind()
    if _no_schema_comum():  # no Postgres a rodada do schema comum só cuida das fotos
        liga.execute(sa.text("delete from planejamento_versao"))
        return
    if liga.dialect.name != 'postgresql':
        liga.execute(sa.text("delete from planejamento_versao"))
    op.drop_table('tabela_de_preco')
    op.drop_table('regra_de_margem')


def downgrade() -> None:
    if _no_schema_comum():
        return
    op.create_table(
        'regra_de_margem',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('cenario_id', sa.Integer(), sa.ForeignKey('cenario_precificacao.id'), nullable=False, unique=True),
        sa.Column('percentual_margem', sa.Numeric(6, 4), nullable=False),
        sa.Column('percentual_socios', sa.Numeric(6, 4), nullable=False),
        sa.Column('percentual_reserva', sa.Numeric(6, 4), nullable=False),
        sa.Column('percentual_expansao', sa.Numeric(6, 4), nullable=False),
        sa.Column('percentual_outros', sa.Numeric(6, 4), nullable=False),
    )
    op.create_table(
        'tabela_de_preco',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('produto_id', sa.Integer(), sa.ForeignKey('produto.id'), nullable=False),
        sa.Column('cenario_id', sa.Integer(), sa.ForeignKey('cenario_precificacao.id'), nullable=False),
        sa.Column('vigencia', sa.Date(), nullable=False),
        sa.Column('preco_sugerido', sa.Numeric(14, 6), nullable=False, server_default='0'),
        sa.Column('preco_praticado', sa.Numeric(14, 6), nullable=False, server_default='0'),
        sa.UniqueConstraint('produto_id', 'cenario_id', 'vigencia', name='uq_tabela_de_preco'),
    )
