"""preço definido por Centro de Resultados

Revision ID: a7c9e1b3d5f6
Revises: f5b7d9e1a3c4
Create Date: 2026-11-05 10:00:00.000000

`preco_centro`: o Preço Definido (preço de tabela) de cada produto em cada Centro; nulo = segue o sugerido do Centro. 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 = 'a7c9e1b3d5f6'
down_revision: Union[str, None] = 'f5b7d9e1a3c4'
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
    op.create_table(
        'preco_centro',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('cenario_id', sa.Integer(), sa.ForeignKey('cenario_precificacao.id'), nullable=False),
        sa.Column('produto_id', sa.Integer(), sa.ForeignKey('produto.id'), nullable=False),
        sa.Column('preco_definido', sa.Numeric(14, 6), nullable=True),
        sa.UniqueConstraint('cenario_id', 'produto_id', name='uq_preco_centro'),
    )


def downgrade() -> None:
    if _no_schema_comum():
        return
    op.drop_table('preco_centro')
