<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

// Lidar com requisições OPTIONS (preflight)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

require_once '../../config/database.php';

try {
    $pdo = getPDOConnection();
    
    // Parâmetros de filtro (opcionais)
    $dataInicio = $_GET['data_inicio'] ?? null;
    $dataFim = $_GET['data_fim'] ?? null;
    $cliente = $_GET['cliente'] ?? null;
    $motorista = $_GET['motorista'] ?? null;
    $status = $_GET['status'] ?? null;
    $limite = (int)($_GET['limite'] ?? 50);
    
    // Construir query SQL dinamicamente
    $sql = "
        SELECT 
            v.id,
            v.cliente,
            v.motivo,
            v.km_inicial,
            v.km_final,
            v.km_gps_final,
            v.data_inicio,
            v.data_fim,
            v.imagem_trajeto,
            v.endereco_inicial,
            v.endereco_final,
            m.nome as motorista,
            m.matricula,
            ve.modelo as veiculo,
            ve.placa,
            CASE 
                WHEN v.data_fim IS NULL THEN 'andamento'
                ELSE 'finalizada'
            END as status,
            CASE 
                WHEN v.km_final IS NOT NULL THEN (v.km_final - v.km_inicial)
                ELSE NULL
            END as km_percorrido
        FROM viagens v
        LEFT JOIN motoristas m ON v.tecnico_id = m.id OR v.tecnico_id = m.usuario
        LEFT JOIN veiculos ve ON v.veiculo_id = ve.id
        WHERE 1=1
    ";
    
    $params = [];
    
    // Aplicar filtros se fornecidos
    if ($dataInicio) {
        $sql .= " AND DATE(v.data_inicio) >= ?";
        $params[] = $dataInicio;
    }
    
    if ($dataFim) {
        $sql .= " AND DATE(v.data_inicio) <= ?";
        $params[] = $dataFim;
    }
    
    if ($cliente) {
        $sql .= " AND v.cliente LIKE ?";
        $params[] = "%$cliente%";
    }
    
    if ($motorista) {
        $sql .= " AND m.nome LIKE ?";
        $params[] = "%$motorista%";
    }
    
    if ($status === 'finalizada') {
        $sql .= " AND v.data_fim IS NOT NULL";
    } elseif ($status === 'andamento') {
        $sql .= " AND v.data_fim IS NULL";
    }
    
    // Ordenar por data mais recente primeiro
    $sql .= " ORDER BY v.data_inicio DESC";
    
    // Aplicar limite
    if ($limite > 0) {
        $sql .= " LIMIT ?";
        $params[] = $limite;
    }
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $trajetos = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // Processar dados para resposta
    $trajetosProcessados = [];
    foreach ($trajetos as $trajeto) {
        // Formatar data
        if ($trajeto['data_inicio']) {
            $data = new DateTime($trajeto['data_inicio']);
            $trajeto['data_inicio_formatada'] = $data->format('d/m/Y H:i');
            $trajeto['data_inicio'] = $data->format('d/m/Y');
        }
        
        if ($trajeto['data_fim']) {
            $data = new DateTime($trajeto['data_fim']);
            $trajeto['data_fim_formatada'] = $data->format('d/m/Y H:i');
            $trajeto['data_fim'] = $data->format('d/m/Y');
        }
        
        // Verificar se arquivo de imagem existe
        if ($trajeto['imagem_trajeto'] && file_exists($trajeto['imagem_trajeto'])) {
            // Converter caminho para URL relativa
            $trajeto['imagem_trajeto_url'] = str_replace('../../', '../', $trajeto['imagem_trajeto']);
        } else {
            $trajeto['imagem_trajeto'] = null;
            $trajeto['imagem_trajeto_url'] = null;
        }
        
        // Calcular estatísticas adicionais
        if ($trajeto['km_inicial'] && $trajeto['km_final']) {
            $trajeto['km_percorrido'] = $trajeto['km_final'] - $trajeto['km_inicial'];
        }
        
        // Adicionar informações de diferença GPS vs Odômetro
        if ($trajeto['km_percorrido'] && $trajeto['km_gps_final']) {
            $diferenca = $trajeto['km_gps_final'] - $trajeto['km_percorrido'];
            $trajeto['diferenca_gps_odometro'] = $diferenca;
            $trajeto['diferenca_percentual'] = $trajeto['km_percorrido'] > 0 ? 
                round(($diferenca / $trajeto['km_percorrido']) * 100, 1) : 0;
        }
        
        $trajetosProcessados[] = $trajeto;
    }
    
    // Estatísticas gerais
    $stats = [
        'total_trajetos' => count($trajetosProcessados),
        'com_imagem' => count(array_filter($trajetosProcessados, function($t) { return $t['imagem_trajeto'] !== null; })),
        'finalizadas' => count(array_filter($trajetosProcessados, function($t) { return $t['status'] === 'finalizada'; })),
        'em_andamento' => count(array_filter($trajetosProcessados, function($t) { return $t['status'] === 'andamento'; }))
    ];
    
    echo json_encode([
        'sucesso' => true,
        'trajetos' => $trajetosProcessados,
        'estatisticas' => $stats,
        'filtros_aplicados' => [
            'data_inicio' => $dataInicio,
            'data_fim' => $dataFim,
            'cliente' => $cliente,
            'motorista' => $motorista,
            'status' => $status,
            'limite' => $limite
        ]
    ]);
    
} catch (Exception $e) {
    error_log("❌ Erro ao buscar trajetos: " . $e->getMessage());
    
    http_response_code(500);
    echo json_encode([
        'sucesso' => false,
        'erro' => $e->getMessage()
    ]);
}
?> 
