-- ============================================================================
-- Confere uma cópia pronta para o ambiente de teste PÚBLICO. MySQL. Só lê.
-- Leia com --default-character-set=utf8mb4: há comparação com texto acentuado.
--
-- Uma linha de números. Numa cópia que acabou de passar por
-- scripts/endurecer-base-teste.sql, todos são zero, MENOS O ÚLTIMO, que é 1:
--
--     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
--
-- Quem lê a linha (deploy-teste.sh e exportar-base-teste.sh) cobra essa
-- forma, e não a contagem: número novo entra ANTES do último.
--
-- Os SEIS PRIMEIROS valem pela vida inteira do ambiente -- o uso normal (um
-- login, um cliente cadastrado) não os mexe, e o `deploy-teste.sh conferir`
-- os cobra sempre. Os outros só valem logo depois da carga: o login grava
-- token_web, e um cliente novo pode ter nome e e-mail de verdade.
--
--    1  unidades com chave de WhatsApp ou id do Asaas
--    2  push_app com chave de WhatsApp
--    3  royalties_faturas com id ou link de cobrança do Asaas
--    4  indicações com link da produção
--    5  unidades com o hash previsível do anonimizador (a credencial da
--       exportação pública de vendas)
--    6  clientes com o hash previsível do anonimizador (a do formulário
--       público de fidelidade), no tamanho antigo (32) ou no de agora (8)
--    7  clientes com e-mail que não é .invalid
--    8  colaboradores com e-mail que não é .invalid
--    9  clientes cujas tags de busca não são as do nome, telefone e e-mail
--       atuais -- até 25/09/2026, o anonimizador as deixava reais. Só mede
--       junto com o 15, que confere o nome
--   10  sócios, idem
--   11  colaboradores com senha antiga, "lembrar de mim" ou troca de senha
--   12  sessões do aplicativo
--   13  convênios com e-mail que não é .invalid, ou contato que não é o
--       genérico
--   14  cadastros fora do padrão do anonimizador: o nome de clientes,
--       colaboradores, sócios e sócio-administrador; o e-mail dos sócios; o
--       nome do visagismo; o
--       texto das notificações; a observação dos agendamentos. É o que mede se
--       a cópia passou MESMO pelo anonimizador -- os de e-mail sozinhos
--       deixavam passar uma anonimização pela metade
--   15  nomes que o próprio sistema escreve em texto: "indicação do <nome>",
--       "realizado pelo colaborador <id> - <nome>", "<nome> cancelou em"
--   16  texto livre digitado pela equipe que não é o genérico do endurecimento
--       -- inclusive o motivo de desconto POR ITEM (vendas_produtos), onde o
--       PDV grava o que a recepção digita
--   17  assistentes com o HTML de incorporação da produção
--   18  clientes cujo hash não tem 8 caracteres: o formulário de fidelidade só
--       aceita esse tamanho, e o de 32 o desligava para a base inteira
--   19  unidades com o painel de BI da produção (`iframe_bi`, a URL com o
--       token) -- 0 também quando a coluna não existe, num banco nascido do
--       mysql.sql de hoje
--   20  mensagens com título que não é o genérico
--   21  senhas distintas entre os colaboradores (1: todos com a mesma)
--
-- O QUE A RÉGUA NÃO MEDE: os hashes que são capacidade na URL (arquivos, VIP
-- Class, pesquisas) são regerados ao acaso pelo endurecimento, e não há como
-- saber, daqui, se algum coincide com o da produção -- a régua não compara com
-- ela. Quem garante esses é o UPDATE, e não este arquivo.
-- ============================================================================

-- O painel de BI só se a coluna existir: num SELECT só, a coluna ausente seria
-- erro. O comando preparado não devolve linha, e a saída continua sendo UMA.
SET @contar_bi = IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS
                           WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'unidades' AND COLUMN_NAME = 'iframe_bi'),
                    'SELECT COUNT(*) INTO @paineis_bi FROM `unidades` WHERE COALESCE(`iframe_bi`, '''') <> ''''',
                    'SET @paineis_bi = 0');
PREPARE contar_bi FROM @contar_bi;
EXECUTE contar_bi;
DEALLOCATE PREPARE contar_bi;

SELECT CONCAT_WS(' ',
    (SELECT COUNT(*) FROM unidades WHERE COALESCE(whatsapp_api_key, '') <> '' OR asaas_id IS NOT NULL),
    (SELECT COUNT(*) FROM push_app WHERE COALESCE(unidade_whatsapp_api_key, '') <> ''),
    (SELECT COUNT(*) FROM royalties_faturas
        WHERE asaas_id IS NOT NULL OR asaas_link_cobranca IS NOT NULL OR asaas_link_boleto IS NOT NULL),
    (SELECT COUNT(*) FROM indicacoes WHERE url LIKE '%franquiabv.com.br%'),
    (SELECT COUNT(*) FROM unidades WHERE hash = MD5(CONCAT('hash-unidade-', id))),
    (SELECT COUNT(*) FROM clientes
        WHERE hash = MD5(CONCAT('hash-cliente-', id)) OR hash = LEFT(MD5(CONCAT('hash-cliente-', id)), 8)),
    (SELECT COUNT(*) FROM clientes WHERE COALESCE(email, '') <> '' AND email NOT LIKE '%.invalid'),
    (SELECT COUNT(*) FROM usuarios WHERE COALESCE(email, '') <> '' AND email NOT LIKE '%.invalid'),
    (SELECT COUNT(*) FROM clientes
        WHERE COALESCE(tags, '') <> LOWER(CONCAT_WS(' ', nome, telefone_sem_mascara, email))),
    (SELECT COUNT(*) FROM unidades_socios
        WHERE COALESCE(tags, '') <> LOWER(CONCAT_WS(' ', nome, telefone_sem_mascara, email))),
    (SELECT COUNT(*) FROM usuarios
        WHERE senha_php83 IS NOT NULL OR token_web IS NOT NULL OR token_trocar_senha IS NOT NULL),
    (SELECT COUNT(*) FROM clientes_sessoes),
    (SELECT COUNT(*) FROM convenios
        WHERE (COALESCE(email, '') <> '' AND email NOT LIKE '%.invalid')
           OR (COALESCE(contato, '') <> '' AND contato <> CONCAT('Contato ', id))),
    (SELECT COUNT(*) FROM clientes WHERE COALESCE(nome, '') <> CONCAT('Cliente ', id))
      + (SELECT COUNT(*) FROM usuarios WHERE COALESCE(nome, '') <> CONCAT('Colaborador ', id))
      + (SELECT COUNT(*) FROM unidades_socios
            WHERE COALESCE(nome, '') <> CONCAT('Sócio ', id)
               OR (COALESCE(email, '') <> '' AND email NOT LIKE '%.invalid'))
      + (SELECT COUNT(*) FROM unidades
            WHERE COALESCE(faturamento_socio_adm_nome, '') <> CONCAT('Sócio Administrador ', id))
      + (SELECT COUNT(*) FROM visagismo WHERE nome IS NOT NULL AND nome <> CONCAT('Cliente Visagismo ', id))
      + (SELECT COUNT(*) FROM notificacoes WHERE COALESCE(conteudo, '') <> 'Conteúdo de exemplo.')
      + (SELECT COUNT(*) FROM agendas WHERE observacao IS NOT NULL)
      + (SELECT COUNT(*) FROM agendas_exclusoes WHERE observacao IS NOT NULL),
    (SELECT COUNT(*) FROM pontuacoes_historicos
        WHERE (descricao LIKE 'Somou mais 10 ponto(s), indica%' AND descricao NOT LIKE '% de um cliente')
           OR (descricao LIKE '%realizado pelo colaborador%'
               AND descricao NOT REGEXP 'realizado pelo colaborador [0-9]+ - Colaborador [0-9]+$'))
      + (SELECT COUNT(*) FROM produtos_estoque
            WHERE COALESCE(cancelamento_motivo, '') <> '' AND cancelamento_motivo NOT LIKE 'Um colaborador cancelou em %'),
    (SELECT COUNT(*) FROM agendas_fechamentos WHERE COALESCE(motivo, '') NOT IN ('', 'Motivo de exemplo'))
      + (SELECT COUNT(*) FROM caixas_retiradas WHERE COALESCE(motivo, '') NOT IN ('', 'Retirada de exemplo'))
      + (SELECT COUNT(*) FROM vendas
            WHERE COALESCE(cancelado_motivo, '') NOT IN ('', 'Motivo de exemplo')
               OR COALESCE(desconto_motivo, '') NOT IN ('', 'Motivo de exemplo'))
      + (SELECT COUNT(*) FROM vendas_produtos
            WHERE COALESCE(desconto_motivo, '') NOT IN ('', 'Motivo de exemplo')
              AND CAST(LEFT(desconto_motivo, 9) AS BINARY) <> CAST('Convênio ' AS BINARY))
      + (SELECT COUNT(*) FROM saidas WHERE COALESCE(descricao, '') NOT IN ('', CONCAT('Saída ', id)))
      + (SELECT COUNT(*) FROM saidas_parcelas_pagamentos
            WHERE COALESCE(observacoes, '') NOT IN ('', 'Observação de exemplo'))
      + (SELECT COUNT(*) FROM mensagens WHERE COALESCE(conteudo, '') NOT IN ('', 'Conteúdo de exemplo.'))
      + (SELECT COUNT(*) FROM sorteios WHERE COALESCE(descricao, '') NOT IN ('', 'Descrição de exemplo.'))
      + (SELECT COUNT(*) FROM convenios WHERE COALESCE(descricao, '') NOT IN ('', 'Descrição de exemplo.'))
      + (SELECT COUNT(*) FROM arquivos WHERE COALESCE(nome_original, '') <> '' AND nome_original NOT LIKE 'arquivo-%'),
    (SELECT COUNT(*) FROM assistentes WHERE iframe <> ''),
    (SELECT COUNT(*) FROM clientes WHERE COALESCE(CHAR_LENGTH(hash), 0) <> 8),
    @paineis_bi,
    (SELECT COUNT(*) FROM mensagens WHERE COALESCE(titulo, '') NOT IN ('', CONCAT('Mensagem ', id))),
    (SELECT COUNT(DISTINCT senha) FROM usuarios)
);
