-- Script para remover checklists duplicados
-- Mantém apenas o checklist mais recente (maior ID) para cada viagem

-- 1. Verificar checklists duplicados ANTES da limpeza
SELECT 
    viagem_id,
    veiculo_id,
    COUNT(*) as total_duplicatas,
    GROUP_CONCAT(id ORDER BY id) as ids_duplicados,
    MIN(created_at) as primeiro_checklist,
    MAX(created_at) as ultimo_checklist
FROM checklist_veiculo 
GROUP BY viagem_id, veiculo_id 
HAVING COUNT(*) > 1
ORDER BY total_duplicatas DESC;

-- 2. BACKUP dos dados duplicados (recomendado executar antes da exclusão)
CREATE TABLE IF NOT EXISTS checklist_veiculo_backup_duplicados AS
SELECT * FROM checklist_veiculo 
WHERE viagem_id IN (
    SELECT viagem_id 
    FROM checklist_veiculo 
    GROUP BY viagem_id, veiculo_id 
    HAVING COUNT(*) > 1
);

-- 3. Deletar checklists duplicados, mantendo apenas o mais recente (maior ID)
DELETE c1 FROM checklist_veiculo c1
INNER JOIN checklist_veiculo c2 
WHERE c1.viagem_id = c2.viagem_id 
  AND c1.veiculo_id = c2.veiculo_id 
  AND c1.id < c2.id;

-- 4. Verificar resultado APÓS a limpeza
SELECT 
    viagem_id,
    veiculo_id,
    COUNT(*) as total_restante
FROM checklist_veiculo 
GROUP BY viagem_id, veiculo_id 
HAVING COUNT(*) > 1;

-- 5. Estatísticas finais
SELECT 
    COUNT(*) as total_checklists,
    COUNT(DISTINCT viagem_id) as viagens_com_checklist,
    SUM(CASE WHEN sincronizado = 1 THEN 1 ELSE 0 END) as sincronizados,
    SUM(CASE WHEN sincronizado = 0 THEN 1 ELSE 0 END) as pendentes
FROM checklist_veiculo; 