"""planejamento, volume projetado e regra de margem (trilha b)

Revision ID: b6889ef1de1d
Revises: c2c76b5719eb
Create Date: 2026-09-17 21:15:00.000000

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


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


def upgrade() -> None:
    op.create_table(
        'planejamento',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('codigo', sa.String(length=20), nullable=False),
        sa.Column('nome', sa.String(length=200), nullable=False),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('codigo'),
    )

    op.create_table(
        'volume_projetado',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('planejamento_id', sa.Integer(), nullable=False),
        sa.Column('cenario_id', sa.Integer(), nullable=False),
        sa.Column('produto_id', sa.Integer(), nullable=False),
        sa.Column('quantidade', sa.Numeric(precision=14, scale=6), nullable=False),
        sa.ForeignKeyConstraint(['planejamento_id'], ['planejamento.id'], ),
        sa.ForeignKeyConstraint(['cenario_id'], ['cenario_precificacao.id'], ),
        sa.ForeignKeyConstraint(['produto_id'], ['produto.id'], ),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('planejamento_id', 'cenario_id', 'produto_id', name='uq_volume_projetado'),
    )

    op.create_table(
        'regra_de_margem',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('cenario_id', sa.Integer(), nullable=False),
        sa.Column('percentual_margem', sa.Numeric(precision=6, scale=4), nullable=False),
        sa.Column('percentual_socios', sa.Numeric(precision=6, scale=4), nullable=False),
        sa.Column('percentual_reserva', sa.Numeric(precision=6, scale=4), nullable=False),
        sa.Column('percentual_expansao', sa.Numeric(precision=6, scale=4), nullable=False),
        sa.ForeignKeyConstraint(['cenario_id'], ['cenario_precificacao.id'], ),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('cenario_id'),
    )


def downgrade() -> None:
    op.drop_table('regra_de_margem')
    op.drop_table('volume_projetado')
    op.drop_table('planejamento')
