"""exclui a Verba de Marketing (marketing passa a ser uma Despesa comum)

Revision ID: e4a6b8c0d2f3
Revises: d3f5a7b9c1e2
Create Date: 2026-11-03 10:00:00.000000

As tabelas `verba_marketing_produto` e `verba_marketing` (e os dados delas) saem. O downgrade só recria as tabelas, vazias. 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 = 'e4a6b8c0d2f3'
down_revision: Union[str, None] = 'd3f5a7b9c1e2'
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.drop_table('verba_marketing_produto')
    op.drop_table('verba_marketing')


def downgrade() -> None:
    if _no_schema_comum():
        return
    op.create_table(
        'verba_marketing',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('codigo', sa.String(20), nullable=False, unique=True),
        sa.Column('plano_de_contas_id', sa.Integer(), sa.ForeignKey('plano_de_contas.id'), nullable=False),
        sa.Column('centro_de_custo_id', sa.Integer(), sa.ForeignKey('centro_de_custo.id'), nullable=False),
        sa.Column('cenario_id', sa.Integer(), sa.ForeignKey('cenario_precificacao.id'), nullable=True),
        sa.Column('competencia', sa.Date(), nullable=False),
        sa.Column('valor', sa.Numeric(14, 6), nullable=False),
        sa.Column('descricao', sa.String(500), nullable=True),
    )
    op.create_table(
        'verba_marketing_produto',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('verba_marketing_id', sa.Integer(), sa.ForeignKey('verba_marketing.id'), nullable=False),
        sa.Column('produto_id', sa.Integer(), sa.ForeignKey('produto.id'), nullable=False),
        sa.UniqueConstraint('verba_marketing_id', 'produto_id', name='uq_verba_marketing_produto'),
    )
