-- ============================================
-- SCRIPT PARA LIBERAR VEÍCULOS TRAVADOS
-- Sistema de Controle de Frota
-- Data: 2025-07-07
-- ============================================

-- 1. VERIFICAR STATUS ATUAL DOS VEÍCULOS
SELECT 
    'ANTES DA CORREÇÃO' as momento,
    status,
    COUNT(*) as total
FROM veiculos 
GROUP BY status
ORDER BY total DESC;

-- 2. MOSTRAR VEÍCULOS TRAVADOS (sem viagem ativa)
SELECT 
    id, modelo, placa, status,
    CASE 
        WHEN id IN (
            SELECT DISTINCT veiculo_id 
            FROM viagens 
            WHERE data_fim IS NULL 
            AND veiculo_id IS NOT NULL
        ) THEN 'HAS_ACTIVE_TRIP'
        ELSE 'NO_ACTIVE_TRIP'
    END as has_active_trip
FROM veiculos 
WHERE status IN ('em_uso', '0', 'ocupado') OR status IS NULL
ORDER BY modelo;

-- 3. LIBERAR VEÍCULOS SEM VIAGEM ATIVA
UPDATE veiculos 
SET 
    status = 'ativo',
    updated_at = NOW()
WHERE (status IN ('em_uso', '0', 'ocupado') OR status IS NULL)
AND id NOT IN (
    SELECT DISTINCT veiculo_id 
    FROM viagens 
    WHERE data_fim IS NULL 
    AND veiculo_id IS NOT NULL
);

-- 4. FINALIZAR VIAGENS ÓRFÃS (sem data de fim há mais de 24h)
UPDATE viagens 
SET 
    data_fim = NOW(),
    observacoes = CONCAT(COALESCE(observacoes, ''), ' - Finalizada automaticamente (órfã)')
WHERE data_fim IS NULL 
AND data_inicio < DATE_SUB(NOW(), INTERVAL 24 HOUR);

-- 5. APÓS FINALIZAR VIAGENS ÓRFÃS, LIBERAR OS VEÍCULOS CORRESPONDENTES
UPDATE veiculos 
SET 
    status = 'ativo',
    updated_at = NOW()
WHERE status IN ('em_uso', '0', 'ocupado') OR status IS NULL;

-- 6. VERIFICAR STATUS FINAL DOS VEÍCULOS
SELECT 
    'APÓS A CORREÇÃO' as momento,
    status,
    COUNT(*) as total
FROM veiculos 
GROUP BY status
ORDER BY total DESC;

-- 7. MOSTRAR VEÍCULOS DISPONÍVEIS PARA O APP
SELECT 
    id, modelo, placa, status,
    'DISPONIVEL_PARA_APP' as disponibilidade
FROM veiculos 
WHERE status = 'ativo'
ORDER BY modelo;

-- 8. VERIFICAR VIAGENS ATIVAS RESTANTES
SELECT 
    v.id as viagem_id,
    ve.modelo,
    ve.placa,
    v.data_inicio,
    v.cliente,
    v.motivo
FROM viagens v
INNER JOIN veiculos ve ON v.veiculo_id = ve.id
WHERE v.data_fim IS NULL
ORDER BY v.data_inicio DESC; 