-- ---------------------------------------------------------------------------
-- Segunda rodada de coleta. As perguntas que a primeira levantou.
--
--   mysql -u USUARIO -p franquia_producao -t < scripts/coletar-producao-2.sql
--
-- Somente leitura. Devolve contagem, nunca linha de dado pessoal — exceto os
-- telefones repetidos da consulta 2, que precisam aparecer porque são o que
-- vai para a lista de exclusão. São números de balcão, não de cliente.
-- ---------------------------------------------------------------------------

SELECT '=== 1. Formato real do telefone ===' AS '';

-- A primeira coleta buscou 10 e 11 dígitos e achou 152 de 242 mil. Ou seja: o
-- formato guardado é outro, quase certamente com o código do país. Esta
-- consulta mostra a distribuição de verdade, sem supor nada.
SELECT LENGTH(telefone_sem_mascara) AS digitos,
       COUNT(*)                     AS quantos,
       ROUND(100 * COUNT(*) / SUM(COUNT(*)) OVER (), 1) AS pct
  FROM clientes
 WHERE telefone_sem_mascara IS NOT NULL AND telefone_sem_mascara <> ''
 GROUP BY digitos
 ORDER BY quantos DESC;

SELECT '=== 1b. Começa com código do país? ===' AS '';

SELECT LEFT(telefone_sem_mascara, 2) AS dois_primeiros,
       COUNT(*)                      AS quantos
  FROM clientes
 WHERE telefone_sem_mascara IS NOT NULL AND telefone_sem_mascara <> ''
 GROUP BY dois_primeiros
 ORDER BY quantos DESC
 LIMIT 12;

SELECT '=== 2. Os números de balcão — vão para a lista de exclusão ===' AS '';

-- Um número com 355 clientes não é telefone de família: é o número da loja, ou
-- um preenchimento padrão que a recepção usa quando o cliente não informa.
-- Precisam ser identificados ANTES de o telefone virar chave de identidade,
-- senão 355 pessoas viram uma só.
SELECT telefone_sem_mascara AS numero,
       COUNT(*)             AS clientes
  FROM clientes
 WHERE telefone_sem_mascara IS NOT NULL AND telefone_sem_mascara <> ''
 GROUP BY telefone_sem_mascara
HAVING clientes >= 10
 ORDER BY clientes DESC;

SELECT '=== 2b. Quanto do total está preso nesses números ===' AS '';

SELECT SUM(clientes)                          AS clientes_em_numero_repetido,
       COUNT(*)                               AS numeros_distintos,
       (SELECT COUNT(*) FROM clientes)        AS total_de_clientes
  FROM (SELECT telefone_sem_mascara, COUNT(*) AS clientes
          FROM clientes
         WHERE telefone_sem_mascara IS NOT NULL AND telefone_sem_mascara <> ''
         GROUP BY telefone_sem_mascara
        HAVING clientes > 1) x;

SELECT '=== 3. Logins duplicados — quantos estão ATIVOS ===' AS '';

-- 389 linhas compartilham login com outra. O que decide a gravidade é quantas
-- são de usuário ativo: a autenticação do Laminas usa `login` como identidade,
-- e com duplicata entre ativos não há como saber quem entra.
SELECT SUM(u.status = 1) AS ativos,
       SUM(u.status = 0) AS inativos,
       COUNT(*)          AS total_em_login_duplicado
  FROM usuarios u
  JOIN (SELECT login FROM usuarios
         WHERE login IS NOT NULL AND login <> ''
         GROUP BY login HAVING COUNT(*) > 1) d ON d.login = u.login;

SELECT '=== 3b. Duplicata entre DOIS ativos é o caso grave ===' AS '';

SELECT COUNT(*) AS logins_com_mais_de_um_ativo
  FROM (SELECT login
          FROM usuarios
         WHERE status = 1 AND login IS NOT NULL AND login <> ''
         GROUP BY login
        HAVING COUNT(*) > 1) x;

SELECT '=== 4. CPF duplicado — mesma pergunta ===' AS '';

SELECT SUM(c.status = 1) AS ativos,
       COUNT(*)          AS total_em_cpf_duplicado
  FROM clientes c
  JOIN (SELECT cpf FROM clientes
         WHERE cpf IS NOT NULL AND cpf <> ''
         GROUP BY cpf HAVING COUNT(*) > 1) d ON d.cpf = c.cpf;

SELECT '=== 5. Os dois eventos agendados dentro do banco (D26) ===' AS '';

-- O event_scheduler está ON, então eles rodam de verdade. Isto mostra o que
-- fazem e quando — vira pg_cron ou agendador externo na F1.6.
SELECT EVENT_NAME, STATUS, EVENT_TYPE, INTERVAL_VALUE, INTERVAL_FIELD,
       LAST_EXECUTED
  FROM information_schema.EVENTS
 WHERE EVENT_SCHEMA = DATABASE();

SELECT '=== 6. Tamanho por tabela — dimensiona a janela de corte ===' AS '';

SELECT TABLE_NAME,
       TABLE_ROWS,
       ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS mb
  FROM information_schema.TABLES
 WHERE TABLE_SCHEMA = DATABASE()
 ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC
 LIMIT 15;
