<?php
/**
 * API para buscar detalhes completos de uma rota específica
 */

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

// Configuração básica de conexão
$host = 'localhost';
$dbname = 'pinheir3_controle_frotasV1.1';
$username = 'pinheir3_admin';
$password = '080880Gelboy';

try {
    // Conectar ao banco
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    // Pegar rota_id do parâmetro
    $rotaId = $_GET['rota_id'] ?? null;
    
    if (!$rotaId) {
        http_response_code(400);
        echo json_encode(['success' => false, 'message' => 'rota_id é obrigatório']);
        exit;
    }
    
    // Buscar detalhes da rota
    $sql = "SELECT 
                sr.*,
                m.nome as motorista_nome,
                v.modelo as veiculo_modelo,
                v.placa as veiculo_placa,
                (SELECT COUNT(*) FROM rota_clientes rc WHERE rc.solicitacao_rota_id = sr.id) as total_clientes
            FROM solicitacoes_rotas sr
            LEFT JOIN motoristas m ON sr.motorista_id = m.id
            LEFT JOIN veiculos v ON sr.veiculo_id = v.id
            WHERE sr.id = ?";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$rotaId]);
    $rota = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$rota) {
        http_response_code(404);
        echo json_encode(['success' => false, 'message' => 'Rota não encontrada']);
        exit;
    }
    
    // Buscar clientes da rota
    $sqlClientes = "SELECT 
                        rc.*,
                        c.nome as cliente_nome_completo,
                        c.telefone as cliente_telefone,
                        c.email as cliente_email,
                        c.endereco as cliente_endereco
                    FROM rota_clientes rc
                    LEFT JOIN clientes c ON rc.cliente_id = c.id
                    WHERE rc.solicitacao_rota_id = ?
                    ORDER BY rc.ordem_sequencia ASC, rc.id ASC";
    
    $stmtClientes = $pdo->prepare($sqlClientes);
    $stmtClientes->execute([$rotaId]);
    $clientes = $stmtClientes->fetchAll(PDO::FETCH_ASSOC);
    
    // Debug: Log dos clientes encontrados
    error_log("🔍 Detalhes da rota $rotaId - Clientes encontrados: " . count($clientes));
    foreach ($clientes as $i => $cliente) {
        error_log("👤 Cliente $i: " . json_encode($cliente));
    }
    
    // Calcular distância total estimada (se houver coordenadas)
    $distanciaTotal = 0;
    if (count($clientes) > 1) {
        for ($i = 0; $i < count($clientes) - 1; $i++) {
            $cliente1 = $clientes[$i];
            $cliente2 = $clientes[$i + 1];
            
            if (!empty($cliente1['latitude']) && !empty($cliente1['longitude']) && 
                !empty($cliente2['latitude']) && !empty($cliente2['longitude'])) {
                
                $lat1 = $cliente1['latitude'];
                $lon1 = $cliente1['longitude'];
                $lat2 = $cliente2['latitude'];
                $lon2 = $cliente2['longitude'];
                
                // Fórmula de Haversine para calcular distância
                $R = 6371; // Raio da Terra em km
                $dLat = deg2rad($lat2 - $lat1);
                $dLon = deg2rad($lon2 - $lon1);
                $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2) * sin($dLon/2);
                $c = 2 * atan2(sqrt($a), sqrt(1-$a));
                $distancia = $R * $c;
                
                $distanciaTotal += $distancia;
            }
        }
    }
    
    // Preparar resposta
    $response = [
        'success' => true,
        'data' => [
            'rota' => [
                'id' => $rota['id'],
                'titulo' => $rota['titulo'],
                'descricao' => $rota['descricao'],
                'status' => $rota['status'],
                'prioridade' => $rota['prioridade'],
                'motorista_id' => $rota['motorista_id'],
                'motorista_nome' => $rota['motorista_nome'],
                'veiculo_id' => $rota['veiculo_id'],
                'veiculo_modelo' => $rota['veiculo_modelo'],
                'veiculo_placa' => $rota['veiculo_placa'],
                'total_clientes' => $rota['total_clientes'],
                'distancia_total_km' => round($distanciaTotal, 2),
                'tempo_estimado_horas' => round($distanciaTotal / 50, 1), // Assumindo 50km/h média
                'data_criacao' => $rota['created_at'],
                'data_atualizacao' => $rota['updated_at']
            ],
            'clientes' => array_map(function($cliente) {
                return [
                    'id' => $cliente['id'],
                    'cliente_id' => $cliente['cliente_id'],
                    'nome' => $cliente['nome_cliente'] ?: $cliente['cliente_nome_completo'] ?: 'Cliente',
                    'telefone' => $cliente['telefone'] ?: $cliente['cliente_telefone'] ?: 'Não informado',
                    'email' => $cliente['cliente_email'] ?: 'Não informado',
                    'endereco' => $cliente['endereco'] ?: $cliente['cliente_endereco'] ?: 'Endereço não informado',
                    'latitude' => $cliente['latitude'] ?: 0,
                    'longitude' => $cliente['longitude'] ?: 0,
                    'ordem' => $cliente['ordem_sequencia'] ?: 0,
                    'observacoes' => $cliente['observacoes'] ?: 'Nenhuma observação'
                ];
            }, $clientes)
        ]
    ];
    
    echo json_encode($response);
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Erro interno: ' . $e->getMessage()]);
}
?>
