-- AS QUATRO PERMISSOES DE VOLTA AO NOME ANTIGO -- o item 4 da volta da etapa 1 do corte
-- (04/11/2026, a resposta 298 (c) do dono; o D701; a DE3 de
-- docs/f3-relatorios/spec-datas-da-equipe.md). O inverso de
-- `scripts/renomear-permissoes-das-telas-novas.sql`.
--
--     mysql --default-character-set=utf8mb4 franquia_producao < scripts/devolver-nomes-das-permissoes-das-telas-novas.sql
--
-- ANTES DE O CODIGO ANTIGO SERVIR. O `SessaoAcl` antigo pergunta ao `Acl` pelos quatro nomes
-- antigos no login de todos, e o `Acl` lanca com o nome que a tabela nao tem: sem este
-- roteiro, ninguem entra no codigo de volta. O codigo novo aceita os dois nomes, entao rodar
-- este com o codigo novo ainda no ar nao derruba ninguem; de volta ao codigo novo, o roteiro de
-- ida roda de novo.
--
-- O QUE ELE FAZ: cada linha volta pelo id E pelo nome novo:
--
--     49  Relatórios de datas da equipe        -> Relatórios de aniversariante
--     40  Relatórios do profissional parceiro  -> Relatórios dashboard colaboradores
--     15  Relatórios da carteira de clientes   -> Relatórios de clientes
--     17  Relatórios da cota-parte             -> Relatórios de vendas
--
-- e confere, como o de ida. Os privilegios ligam pelo id e nao mudam.
--
-- ELE PARA SEM MUDAR NADA (o cliente sai com 1, "Column 'PARE_...' cannot be null") se o nome
-- antigo ja existir em OUTRO id (dois recursos com o mesmo nome derrubam o login de todos), e se
-- um dos quatro ids nao ficar com o nome antigo (a conferencia e dentro da transacao: o cliente
-- sai e o InnoDB desfaz os quatro). Diz qual antes de parar. Idempotente.
--
-- O ENSAIO e `php scripts/ensaiar-permissoes-com-o-nome-da-tela.php`, num banco descartavel.

SET NAMES utf8mb4;

CREATE TEMPORARY TABLE de3_nomes (
    id INT NOT NULL PRIMARY KEY,
    antigo VARCHAR(100) NOT NULL,
    novo VARCHAR(100) NOT NULL
) DEFAULT CHARACTER SET utf8mb4;

INSERT INTO de3_nomes (id, antigo, novo) VALUES
    (49, 'Relatórios de aniversariante', 'Relatórios de datas da equipe'),
    (40, 'Relatórios dashboard colaboradores', 'Relatórios do profissional parceiro'),
    (15, 'Relatórios de clientes', 'Relatórios da carteira de clientes'),
    (17, 'Relatórios de vendas', 'Relatórios da cota-parte');

SELECT '=== ANTES (id, nome, moldes de grupo, linhas de pessoas)' AS '';
SELECT f.id, f.nome,
       (SELECT COUNT(*) FROM privilegios p WHERE p.funcionalidade = f.id),
       (SELECT COUNT(*) FROM privilegios_usuarios u WHERE u.funcionalidade = f.id)
  FROM funcionalidades f
 WHERE f.id IN (SELECT id FROM de3_nomes)
 ORDER BY f.id;

-- 1. O NOME ANTIGO EM OUTRO ID: lista e para, antes de mudar qualquer coisa.
SELECT '=== PARE SE HOUVER LINHA: o nome antigo ja existe em outro id (id, nome)' AS '';
SELECT f.id, f.nome
  FROM funcionalidades f
  JOIN de3_nomes n ON f.nome = n.antigo AND f.id <> n.id
 ORDER BY f.id;

CREATE TEMPORARY TABLE de3_pare_antes (PARE_o_nome_antigo_ja_existe_em_outro_id CHAR(2) NOT NULL);
INSERT INTO de3_pare_antes VALUES (IF(
    (SELECT COUNT(*) FROM funcionalidades f JOIN de3_nomes n ON f.nome = n.antigo AND f.id <> n.id) = 0,
    'ok', NULL));

CREATE TEMPORARY TABLE de3_pare_depois (PARE_um_dos_quatro_ids_nao_voltou_ao_nome_antigo CHAR(2) NOT NULL);

START TRANSACTION;

SELECT '=== MUDOU (as linhas devolvidas agora: 4 na primeira vez, 0 nas seguintes)' AS '';
UPDATE funcionalidades f
  JOIN de3_nomes n ON n.id = f.id
   SET f.nome = n.antigo
 WHERE f.nome = n.novo;
SELECT ROW_COUNT();

-- 2. A CONFERENCIA, DENTRO DA TRANSACAO: os quatro ids com o nome antigo.
SELECT '=== PARE SE HOUVER LINHA: o id que nao voltou ao nome antigo (id, o nome de agora)' AS '';
SELECT n.id, COALESCE(f.nome, '(o id nao existe)')
  FROM de3_nomes n
  LEFT JOIN funcionalidades f ON f.id = n.id
 WHERE f.nome IS NULL OR f.nome <> n.antigo
 ORDER BY n.id;

INSERT INTO de3_pare_depois VALUES (IF(
    (SELECT COUNT(*) FROM funcionalidades f JOIN de3_nomes n ON n.id = f.id AND f.nome = n.antigo) = 4,
    'ok', NULL));

COMMIT;

SELECT '=== DEPOIS (id, nome, moldes de grupo, linhas de pessoas: as mesmas contagens de antes)' AS '';
SELECT f.id, f.nome,
       (SELECT COUNT(*) FROM privilegios p WHERE p.funcionalidade = f.id),
       (SELECT COUNT(*) FROM privilegios_usuarios u WHERE u.funcionalidade = f.id)
  FROM funcionalidades f
 WHERE f.id IN (SELECT id FROM de3_nomes)
 ORDER BY f.id;

SELECT '=== DEPOIS, NENHUMA LINHA COM UM DOS NOMES NOVOS (zero)' AS '';
SELECT COUNT(*) FROM funcionalidades f JOIN de3_nomes n ON f.nome = n.novo;
