-- Mede o alcance do D78 e do D79 na PRODUCAO, antes de decidir o conserto.
--
--     mysql -u<usuario> -p <banco> < scripts/medir-senhas-producao.sql
--
-- SO LE. Nenhum UPDATE, nenhum DELETE, nenhuma senha impressa -- apenas
-- contagens. Pode rodar em producao sem alterar nada.
--
-- POR QUE ISTO EXISTE. Por decisao de 01/09/2026, a escolha entre os tres
-- caminhos do D78/D79 depende de um numero que a copia local NAO tem: a
-- anonimizacao faz `salt = NULL` e troca `senha` por um hash fixo de
-- desenvolvimento (`anonimizar.sql.modelo`, linhas 79 e 81). Medir aqui daria
-- zero, e zero nao significaria nada -- e a quarta vez neste projeto que a
-- copia esconde o que se quer medir, depois do D31, do D40 e do D72.
--
-- A PERGUNTA QUE DECIDE. O conserto do D78 troca a autenticacao por
-- `password_verify` contra a coluna `senha`. Isso so e seguro se TODO usuario
-- ativo tiver um bcrypt valido ali. Quem nao tiver fica trancado para fora no
-- instante da mudanca -- e descobrir isso depois e muito pior que antes.
--
-- O login principal ja usa `password_verify` (o `credential_callable` em
-- `config/autoload/doctrine.global.php`), entao a expectativa e que a secao 4
-- devolva zero. EXPECTATIVA NAO E MEDIDA. Se nao for zero, o caminho muda:
-- esses usuarios redefinem a senha antes, ou a migracao precisa de um periodo
-- em que os dois modos convivem.

SELECT '=== 1. o universo ===' AS '';

SELECT
    COUNT(*)                                            AS usuarios,
    SUM(status = 1)                                     AS ativos,
    SUM(status <> 1 OR status IS NULL)                  AS inativos
FROM usuarios;

SELECT '=== 2. a coluna `salt`: quantas senhas sao recuperaveis hoje (D78) ===' AS '';

SELECT
    SUM(salt IS NOT NULL AND salt <> '')                AS com_salt_preenchido,
    SUM(status = 1 AND salt IS NOT NULL AND salt <> '') AS destes_ativos
FROM usuarios;

SELECT '=== 3. a coluna `senha`: da para autenticar por bcrypt? ===' AS '';

-- O prefixo `$2y$` e o do bcrypt do PHP. Qualquer outra coisa nesta coluna
-- significa que `password_verify` vai recusar.
SELECT
    SUM(senha LIKE '$2y$%')                             AS parecem_bcrypt,
    SUM(senha IS NULL OR senha = '')                    AS vazias,
    SUM(senha IS NOT NULL AND senha <> ''
        AND senha NOT LIKE '$2y$%')                     AS outro_formato
FROM usuarios;

SELECT '=== 4. O NUMERO QUE DECIDE: ativos que ficariam trancados ===' AS '';

SELECT COUNT(*) AS ativos_sem_bcrypt_valido
FROM usuarios
WHERE status = 1
  AND (senha IS NULL OR senha = '' OR senha NOT LIKE '$2y$%');

SELECT '--- zero: o caminho do password_verify esta livre                  ---' AS '';
SELECT '--- diferente de zero: esses redefinem a senha antes da mudanca    ---' AS '';

SELECT '=== 5. quem sao, sem expor ninguem ===' AS '';

-- Nem login, nem e-mail, nem senha: so o id e a data de criacao, para dar
-- rastro sem expor pessoa. Se a lista for curta, trata-se caso a caso.
SELECT id, data_criacao
FROM usuarios
WHERE status = 1
  AND (senha IS NULL OR senha = '' OR senha NOT LIKE '$2y$%')
ORDER BY id
LIMIT 50;
