-- ========================================
-- CORREÇÃO IMEDIATA DO CHECKLIST COM ID INCORRETO
-- Execute este script para corrigir o problema encontrado
-- ========================================

-- 1. MOSTRAR O PROBLEMA ANTES DA CORREÇÃO
SELECT 'ANTES DA CORREÇÃO:' as status;
SELECT 
    c.id as checklist_id,
    c.viagem_id as viagem_id_incorreto,
    c.veiculo_id,
    c.data_hora,
    'Viagem não existe' as problema
FROM checklist_veiculo c
LEFT JOIN viagens v ON c.viagem_id = v.id
WHERE v.id IS NULL;

-- 2. MOSTRAR A CORREÇÃO QUE SERÁ APLICADA
SELECT 'CORREÇÃO QUE SERÁ APLICADA:' as status;
SELECT 
    c.id as checklist_id,
    c.viagem_id as viagem_id_incorreto,
    v_correta.id as viagem_id_correto,
    v_correta.cliente,
    v_correta.motivo,
    CONCAT('Checklist ', c.id, ' será corrigido de viagem_id=', c.viagem_id, ' para viagem_id=', v_correta.id) as acao
FROM checklist_veiculo c
LEFT JOIN viagens v_incorreta ON c.viagem_id = v_incorreta.id
JOIN viagens v_correta ON (
    v_correta.veiculo_id = c.veiculo_id 
    AND DATE(v_correta.data_inicio) = DATE(c.data_hora)
)
WHERE v_incorreta.id IS NULL;

-- 3. EXECUTAR A CORREÇÃO AUTOMÁTICA
UPDATE checklist_veiculo c
JOIN viagens v ON (
    v.veiculo_id = c.veiculo_id 
    AND DATE(v.data_inicio) = DATE(c.data_hora)
)
LEFT JOIN viagens v_incorreta ON c.viagem_id = v_incorreta.id
SET c.viagem_id = v.id
WHERE v_incorreta.id IS NULL;

-- 4. VERIFICAR SE A CORREÇÃO FOI APLICADA
SELECT 'APÓS A CORREÇÃO:' as status;
SELECT 
    COUNT(*) as checklists_com_problema
FROM checklist_veiculo c
LEFT JOIN viagens v ON c.viagem_id = v.id
WHERE v.id IS NULL;

-- 5. MOSTRAR O RESULTADO FINAL
SELECT 'RESULTADO FINAL:' as status;
SELECT 
    c.id as checklist_id,
    c.viagem_id as viagem_id_correto,
    c.veiculo_id,
    c.data_hora,
    v.cliente,
    v.motivo,
    '✅ CORRIGIDO' as status_checklist
FROM checklist_veiculo c
JOIN viagens v ON c.viagem_id = v.id
WHERE c.id = 31; -- ID do checklist que estava com problema

-- 6. AUDITORIA - REGISTRAR A CORREÇÃO
INSERT INTO auditoria_checklist (checklist_id, viagem_id_antigo, viagem_id_novo, observacao)
SELECT 31, 15, 102, 'Correção automática: viagem_id incorreto corrigido'
WHERE NOT EXISTS (
    SELECT 1 FROM auditoria_checklist WHERE checklist_id = 31 AND viagem_id_antigo = 15
);

-- Criar tabela de auditoria se não existir
CREATE TABLE IF NOT EXISTS auditoria_checklist (
    id INT AUTO_INCREMENT PRIMARY KEY,
    checklist_id INT,
    viagem_id_antigo INT,
    viagem_id_novo INT,
    data_correcao TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    usuario VARCHAR(100) DEFAULT 'sistema',
    observacao TEXT
); 