-- ---------------------------------------------------------------------------
-- Os debitos de fiado criados em dobro pelo PDV antigo: a CONSULTA, que so le (07/11/2026, a fatia 101,
-- FINALIZAR-E-CANCELAR-SEM-DINHEIRO-EM-DOBRO; a resposta 86 (a) do dono, o D321: "Eu escrevo a consulta e a baixa;
-- voce roda as duas na producao agora. A consulta so le e lista, venda por venda, os debitos repetidos (abertos e
-- fechados); a baixa fecha so a copia ainda aberta, sem venda nem caixa. Os ja pagos em dobro e os pontos vem
-- depois, com o numero na mao.").
--
--   mysql franquia_producao < medir-debitos-em-dobro.sql | tee /root/debitos-em-dobro-medir-<data>.txt
--   docker compose exec -T mysql mysql -uroot -proot franquiabv_dev < scripts/medir-debitos-em-dobro.sql
--
-- (Na producao, o arquivo copiado para o servidor: a arvore de la ainda e a antiga, e nao o tem. O irmao em
-- `postgres/` e o mesmo, depois do corte.)
--
-- POR QUE. Ate 01/10/2026 a venda finalizada de novo pelo PDV antigo (o reclique depois de um erro, o D316) criava o
-- fiado de novo: `clientes_debitos` com a MESMA `venda` mais de uma vez, e quem quitava pagava a mesma venda duas
-- vezes. O finalizar so cria um debito por venda (`VendaPagamentoService::finalizar`); o segundo e os seguintes sao a
-- copia.
--
-- A COPIA, NESTE ROTEIRO E NO DA BAIXA: o debito de uma venda que tem mais de um, que NAO e o primeiro dela (o menor
-- id), e que repete o primeiro -- o mesmo cliente, a mesma unidade e o mesmo valor, ate o centavo. O debito repetido
-- que difere do primeiro em qualquer dos tres nao e copia: aparece na lista e na contagem `repetidos_que_nao_sao_copia`,
-- e a baixa nao o toca (na copia local de agosto, 0).
--
-- O QUE SAI, nesta ordem (so ids, valores, datas e contagens: nenhum nome, telefone ou documento):
--   1. o resumo -- quantas vendas, quantas copias, as abertas e as fechadas com o valor de cada lado, os repetidos
--      que nao sao copia; e quantos "primeiros" continuam abertos com uma copia ja fechada (a copia foi paga, e o
--      primeiro segue cobrando: a baixa NAO os fecha, porque fecha so a copia; a 86 (a) nao fala deles, e o que
--      fazer e a pergunta do lote de 07/11/2026, TELAS-RESTANTES [vendas], D321). ESTE NUMERO E O DE ANTES DA
--      BAIXA: depois dela, a copia que a baixa fechou parece paga, e o primeiro dela entra na conta -- guarde a
--      saida da primeira consulta;
--   2. a lista, venda por venda: o estado da venda, o cliente, a unidade, quantos debitos, abertos e fechados, cada
--      debito (id, aberto ou fechado, valor, na ordem do id) e quantas vendas de quitacao apontam para eles
--      (`vendas.debito`: o pagamento do fiado pela tela de devedores);
--   3. as copias abertas, uma por linha, com a `data_alteracao` de hoje: e o que a baixa fecharia.
--
-- NAO ESCREVE NADA: so SELECT.
-- ---------------------------------------------------------------------------

-- 1. O resumo.
WITH primeiros AS (
    SELECT venda, MIN(id) AS primeiro FROM clientes_debitos GROUP BY venda HAVING COUNT(*) > 1
), repetidos AS (
    SELECT d.id, d.venda, d.valor, d.status,
           CASE WHEN d.cliente = p.cliente AND d.unidade = p.unidade
                     AND CAST(d.valor AS DECIMAL(12,2)) = CAST(p.valor AS DECIMAL(12,2)) THEN 1 ELSE 0 END AS copia
      FROM primeiros f
      JOIN clientes_debitos p ON p.id = f.primeiro
      JOIN clientes_debitos d ON d.venda = f.venda AND d.id <> f.primeiro
)
SELECT COUNT(DISTINCT r.venda) AS vendas_com_debito_repetido,
       COALESCE(SUM(r.copia), 0) AS copias,
       COALESCE(SUM(CASE WHEN r.copia = 1 AND r.status = TRUE THEN 1 ELSE 0 END), 0) AS copias_abertas,
       ROUND(COALESCE(SUM(CASE WHEN r.copia = 1 AND r.status = TRUE THEN r.valor ELSE 0 END), 0), 2) AS valor_das_copias_abertas,
       COALESCE(SUM(CASE WHEN r.copia = 1 AND r.status = FALSE THEN 1 ELSE 0 END), 0) AS copias_fechadas,
       ROUND(COALESCE(SUM(CASE WHEN r.copia = 1 AND r.status = FALSE THEN r.valor ELSE 0 END), 0), 2) AS valor_das_copias_fechadas,
       COALESCE(SUM(1 - r.copia), 0) AS repetidos_que_nao_sao_copia,
       (SELECT COUNT(*) FROM primeiros f JOIN clientes_debitos p ON p.id = f.primeiro
         WHERE p.status = TRUE AND EXISTS (SELECT 1 FROM repetidos c WHERE c.venda = f.venda AND c.copia = 1 AND c.status = FALSE)) AS primeiros_abertos_com_copia_fechada,
       (SELECT ROUND(COALESCE(SUM(p.valor), 0), 2) FROM primeiros f JOIN clientes_debitos p ON p.id = f.primeiro
         WHERE p.status = TRUE AND EXISTS (SELECT 1 FROM repetidos c WHERE c.venda = f.venda AND c.copia = 1 AND c.status = FALSE)) AS valor_dos_primeiros_abertos_com_copia_fechada
  FROM repetidos r;

-- 2. A lista, venda por venda.
SELECT d.venda, v.status AS status_da_venda, MIN(d.cliente) AS cliente, MIN(d.unidade) AS unidade,
       COUNT(*) AS debitos,
       SUM(CASE WHEN d.status = TRUE THEN 1 ELSE 0 END) AS abertos,
       SUM(CASE WHEN d.status = FALSE THEN 1 ELSE 0 END) AS fechados,
       GROUP_CONCAT(CONCAT(d.id, CASE WHEN d.status = TRUE THEN ':aberto:' ELSE ':fechado:' END, CAST(d.valor AS DECIMAL(12,2)))
                    ORDER BY d.id SEPARATOR ' ') AS os_debitos,
       COALESCE(SUM(q.quitacoes), 0) AS vendas_de_quitacao
  FROM clientes_debitos d
  JOIN vendas v ON v.id = d.venda
  LEFT JOIN (SELECT debito, COUNT(*) AS quitacoes FROM vendas WHERE debito IS NOT NULL GROUP BY debito) q ON q.debito = d.id
 WHERE d.venda IN (SELECT venda FROM clientes_debitos GROUP BY venda HAVING COUNT(*) > 1)
 GROUP BY d.venda, v.status
 ORDER BY d.venda;

-- 3. As copias abertas: o que a baixa (`baixar-debitos-em-dobro.sql`) fecharia.
WITH primeiros AS (
    SELECT venda, MIN(id) AS primeiro FROM clientes_debitos GROUP BY venda HAVING COUNT(*) > 1
)
SELECT d.id, d.venda, CAST(d.valor AS DECIMAL(12,2)) AS valor, d.data_criacao, d.data_alteracao
  FROM primeiros f
  JOIN clientes_debitos p ON p.id = f.primeiro
  JOIN clientes_debitos d ON d.venda = f.venda AND d.id <> f.primeiro
 WHERE d.status = TRUE AND d.cliente = p.cliente AND d.unidade = p.unidade
   AND CAST(d.valor AS DECIMAL(12,2)) = CAST(p.valor AS DECIMAL(12,2))
 ORDER BY d.id;
