-- ---------------------------------------------------------------------------
-- O irmao no PostgreSQL de `scripts/migracao-venda-cancelamento.sql` (03/11/2026, a
-- fatia 70 da fila das telas que faltam, PDV-CANCELAMENTO; a P0 de
-- `docs/f3-relatorios/spec-ordem.md`, secao 4.1), para a COPIA LOCAL de pe:
--
--   docker exec -i franquiabv-postgres-1 sh -c 'psql -U "$POSTGRES_USER" -d franquiabv_dev -v ON_ERROR_STOP=1' \
--     < postgres/migracao-venda-cancelamento.sql
--
-- O que ela cria e, linha a linha, o que `scripts/gerar-ddl-postgres.php` emite no
-- `postgres/schema.sql` a partir do `mysql.sql` (a coluna, o indice com o
-- `inquilino_id` na frente e a chave estrangeira simples). Os bancos da suite e o do
-- contrato nascem do `schema.sql` e nao precisam deste arquivo; em producao, o
-- PostgreSQL nasce do `schema.sql` na janela, e tambem nao.
--
-- IDEMPOTENTE: `ADD COLUMN IF NOT EXISTS`, `CREATE INDEX IF NOT EXISTS` e a chave
-- estrangeira so se ela nao existir; numa transacao so.
--
-- PARA DESFAZER: `ALTER TABLE vendas DROP COLUMN cancelado_por, DROP COLUMN cancelado_em;`
-- e `ALTER TABLE vendas_produtos DROP COLUMN desconto_lancado_por;` (o indice e a chave
-- saem com a coluna).
-- ---------------------------------------------------------------------------

BEGIN;

ALTER TABLE vendas ADD COLUMN IF NOT EXISTS cancelado_em timestamptz DEFAULT NULL;
ALTER TABLE vendas ADD COLUMN IF NOT EXISTS cancelado_por integer DEFAULT NULL;
ALTER TABLE vendas_produtos ADD COLUMN IF NOT EXISTS desconto_lancado_por integer DEFAULT NULL;

CREATE INDEX IF NOT EXISTS vendas_FK_VENDAS_cancelado_por ON vendas (inquilino_id, cancelado_por);
CREATE INDEX IF NOT EXISTS vendas_produtos_FK_VENDAS_PRODUTOS_desconto_lancado_por ON vendas_produtos (inquilino_id, desconto_lancado_por);

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_vendas_cancelado_por') THEN
        ALTER TABLE vendas ADD CONSTRAINT FK_VENDAS_cancelado_por FOREIGN KEY (cancelado_por) REFERENCES usuarios (id);
    END IF;

    IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_vendas_produtos_desconto_lancado_por') THEN
        ALTER TABLE vendas_produtos ADD CONSTRAINT FK_VENDAS_PRODUTOS_desconto_lancado_por
            FOREIGN KEY (desconto_lancado_por) REFERENCES usuarios (id);
    END IF;
END
$$;

COMMIT;
