-- ---------------------------------------------------------------------------
-- Uma fatura de royalties por unidade e vencimento, na COPIA LOCAL do PostgreSQL (07/11/2026,
-- a correcao da fatia 105, ROYALTIES-E-TRAVAS-DO-CRON; o D44). A chave entrou no
-- `postgres/schema.sql` pela lista `$unicidades` de `scripts/gerar-ddl-postgres.php`, e os
-- bancos que nascem dele -- o da suite, o do contrato, e o de producao na janela do corte --
-- ja a tem. A copia de pe (`franquiabv_dev` do conteiner `franquiabv-postgres-1`) nasceu antes
-- e nao a tinha: este roteiro a acrescenta ali.
--
--   docker exec -i franquiabv-postgres-1 sh -c 'psql -U "$POSTGRES_USER" -d franquiabv_dev -v ON_ERROR_STOP=1' \
--     < postgres/migracao-royalties-faturas-unica.sql
--
-- SO ACRESCENTA (a resposta 83 (a) do dono): nao apaga nem altera linha. Com um par (inquilino,
-- unidade, vencimento) repetido, o ALTER falha e a transacao inteira volta -- limpar seria apagar
-- fatura, e isso e do dono. Na copia, contado antes (07/11/2026, so SELECT): 890 faturas, ZERO
-- pares repetidos. O MySQL nao recebe a chave (como a de `royalties`): o de producao fica como
-- esta ate o corte, e ali a trava da rotina segue sendo a protecao.
--
-- POR QUE NAO A DE `royalties` JUNTO: a copia do PostgreSQL tambem nao tem a chave
-- (inquilino_id, unidade, data), e tem os 87 pares do D110 -- acrescenta-la pede apagar linha.
--
-- IDEMPOTENTE: a restricao so e criada se ainda nao existe NESTA tabela (`conrelid`, e nao so o
-- nome); numa transacao so. Rodado pelo superusuario do conteiner, o RLS nao filtra: todos os
-- inquilinos. PARA DESFAZER: `ALTER TABLE royalties_faturas DROP CONSTRAINT
-- royalties_faturas_inquilino_id_unidade_vencimento_unico;`.
-- ---------------------------------------------------------------------------

BEGIN;

-- ANTES: as faturas e os pares repetidos (tem de ser zero).
SELECT (SELECT COUNT(*) FROM royalties_faturas) AS faturas,
       (SELECT COUNT(*) FROM (SELECT 1 FROM royalties_faturas GROUP BY inquilino_id, unidade, vencimento HAVING COUNT(*) > 1) r) AS pares_repetidos;

DO $$
BEGIN
    IF NOT EXISTS (SELECT 1 FROM pg_constraint
                    WHERE conrelid = 'royalties_faturas'::regclass
                      AND conname = 'royalties_faturas_inquilino_id_unidade_vencimento_unico') THEN
        ALTER TABLE royalties_faturas
            ADD CONSTRAINT royalties_faturas_inquilino_id_unidade_vencimento_unico UNIQUE (inquilino_id, unidade, vencimento);
    END IF;
END $$;

-- DEPOIS: a restricao, com as colunas na ordem.
SELECT (SELECT COUNT(*) FROM royalties_faturas) AS faturas,
       (SELECT pg_get_constraintdef(oid) FROM pg_constraint
         WHERE conrelid = 'royalties_faturas'::regclass
           AND conname = 'royalties_faturas_inquilino_id_unidade_vencimento_unico') AS restricao;

COMMIT;
