<?php
/**
 * Dashboard Data - Consulta direta ao banco de dados
 * Evita problemas de cache e replicação da API
 */

// Configurar UTF-8 e CORS
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization');

// Responder OPTIONS para CORS
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit();
}

// Conectar ao banco
function conectarBanco() {
    $host = 'localhost';
    $dbname = 'pinheir3_controle_frotasV1.1';
    $username = 'pinheir3_admin';
    $password = '080880Gelboy';
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password, [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        ]);
        return $pdo;
    } catch (PDOException $e) {
        throw new Exception('Erro de conexão: ' . $e->getMessage());
    }
}

// Resposta padronizada
function resposta($sucesso, $dados = null, $mensagem = '', $codigo = 200) {
    http_response_code($codigo);
    echo json_encode([
        'sucesso' => $sucesso,
        'dados' => $dados,
        'mensagem' => $mensagem,
        'timestamp' => date('c')
    ], JSON_UNESCAPED_UNICODE);
    exit();
}

try {
    $pdo = conectarBanco();
    
    // Parâmetros
    $acao = $_GET['acao'] ?? 'viagens';
    $limite = $_GET['limite'] ?? 20;
    
    switch ($acao) {
        case 'viagens':
            // 🔧 CONSULTA DIRETA AO BANCO - Dados únicos para cada rota
            $stmt = $pdo->prepare("
                SELECT 
                    sr.id as id,
                    sr.titulo as cliente,
                    sr.descricao as motivo,
                    sr.motorista_id as tecnico_id,
                    sr.veiculo_id,
                    
                    -- 🔧 ODÔMETROS ESPECÍFICOS DE CADA ROTA
                    (SELECT v.odometro_inicial 
                     FROM viagens v 
                     INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.odometro_inicial IS NOT NULL 
                     ORDER BY v.data_inicio ASC 
                     LIMIT 1) as odometro_inicial,
                     
                    (SELECT v.odometro_final 
                     FROM viagens v 
                     INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.odometro_final IS NOT NULL 
                     ORDER BY v.data_fim DESC 
                     LIMIT 1) as odometro_final,
                     
                    -- 🔧 DISTÂNCIA GPS ESPECÍFICA DE CADA ROTA
                    (SELECT SUM(v.distancia_gps) 
                     FROM viagens v 
                     INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.distancia_gps > 0) as distancia_gps,
                     
                    sr.data_inicio_real as data_inicio,
                    sr.data_fim_real as data_fim,
                    NULL as latitude_inicial,
                    NULL as longitude_inicial,
                    NULL as latitude_final,
                    NULL as longitude_final,
                    'Múltiplos endereços' as endereco_inicial,
                    'Múltiplos endereços' as endereco_final,
                    sr.observacoes_finais as observacoes,
                    sr.justificativa_km as justificativa_divergencia,
                    sr.km_estimado as km_planejado,
                    sr.diferenca_km_calculada,
                    
                    -- 🔧 DADOS DO MOTORISTA E VEÍCULO
                    COALESCE(m.nome, 'Motorista não identificado') as tecnico_nome,
                    COALESCE(m.matricula, 'N/A') as tecnico_matricula,
                    COALESCE(ve.modelo, 'Veículo não identificado') as veiculo_nome,
                    COALESCE(ve.placa, 'N/A') as veiculo_placa,
                    CONCAT(COALESCE(ve.modelo, 'Veículo não identificado'), ' - ', COALESCE(ve.placa, 'N/A')) as veiculo_completo,
                    
                    'rota' as tipo,
                    sr.id as rota_id,
                    
                    -- 🔧 DISTÂNCIAS ESPECÍFICAS
                    (SELECT SUM(v.distancia_gps) 
                     FROM viagens v 
                     INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND v.distancia_gps > 0) as distancia_total,
                     
                    (SELECT SUM(COALESCE(v.km_gps_real, v.distancia_gps)) 
                     FROM viagens v 
                     INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                     WHERE rv.solicitacao_rota_id = sr.id 
                     AND (v.km_gps_real > 0 OR v.distancia_gps > 0)) as km_gps_real,
                     
                    CASE 
                        WHEN sr.data_fim_real IS NOT NULL THEN 'concluida'
                        WHEN sr.data_inicio_real IS NOT NULL THEN 'em_andamento'
                        ELSE sr.status
                    END as rota_status
                    
                FROM solicitacoes_rotas sr
                LEFT JOIN motoristas m ON sr.motorista_id = m.id
                LEFT JOIN veiculos ve ON sr.veiculo_id = ve.id
                WHERE sr.status IN ('aprovada', 'em_andamento', 'em_execucao', 'concluida')
                ORDER BY sr.id DESC
                LIMIT :limite
            ");
            
            $stmt->bindValue(':limite', (int)$limite, PDO::PARAM_INT);
            $stmt->execute();
            $viagens = $stmt->fetchAll();
            
            // 🔧 DEBUG: Log dos dados únicos
            error_log("🔍 DASHBOARD DB - Rotas encontradas: " . count($viagens));
            foreach ($viagens as $index => $viagem) {
                error_log("🔍 DASHBOARD DB - Rota {$index}: ID={$viagem['id']}, Cliente={$viagem['cliente']}, OdometroInicial={$viagem['odometro_inicial']}, OdometroFinal={$viagem['odometro_final']}");
            }
            
            resposta(true, $viagens, 'Dados do dashboard carregados diretamente do banco');
            break;
            
        case 'estatisticas':
            // Estatísticas do dashboard
            $stats = [];
            
            // Total de veículos disponíveis (verificar diferentes status)
            $stmt = $pdo->query("SELECT COUNT(*) as total FROM veiculos WHERE status IN ('disponivel', 'ativo', 'disponível')");
            $veiculosDisponiveis = $stmt->fetch()['total'];
            
            // Se não encontrou veículos com status específico, contar todos os veículos
            if ($veiculosDisponiveis == 0) {
                $stmt = $pdo->query("SELECT COUNT(*) as total FROM veiculos");
                $veiculosDisponiveis = $stmt->fetch()['total'];
            }
            
            $stats['veiculos_disponiveis'] = $veiculosDisponiveis;
            
            // Debug: verificar todos os status de veículos
            $stmt = $pdo->query("SELECT status, COUNT(*) as count FROM veiculos GROUP BY status");
            $statusVeiculos = $stmt->fetchAll();
            error_log("Status de veículos encontrados: " . json_encode($statusVeiculos));
            error_log("Veículos disponíveis calculados: " . $veiculosDisponiveis);
            
            // Veículos em andamento
            $stmt = $pdo->query("
                SELECT COUNT(DISTINCT sr.veiculo_id) as total 
                FROM solicitacoes_rotas sr 
                WHERE sr.status IN ('em_andamento', 'em_execucao')
            ");
            $stats['veiculos_em_andamento'] = $stmt->fetch()['total'];
            
            // Total de viagens
            $stmt = $pdo->query("SELECT COUNT(*) as total FROM viagens");
            $stats['total_viagens'] = $stmt->fetch()['total'];
            
            // Total de técnicos
            $stmt = $pdo->query("SELECT COUNT(*) as total FROM motoristas WHERE status = 'ativo'");
            $stats['total_tecnicos'] = $stmt->fetch()['total'];
            
            resposta(true, $stats, 'Estatísticas carregadas');
            break;
            
        case 'debug':
            // Debug - mostrar dados brutos
            $stmt = $pdo->query("
                SELECT 
                    sr.id,
                    sr.titulo,
                    sr.motorista_id,
                    sr.veiculo_id,
                    sr.status,
                    sr.data_inicio_real,
                    sr.data_fim_real
                FROM solicitacoes_rotas sr
                ORDER BY sr.id DESC
                LIMIT 5
            ");
            $rotas = $stmt->fetchAll();
            
            $debug = [];
            foreach ($rotas as $rota) {
                // Buscar viagens desta rota
                $stmt = $pdo->prepare("
                    SELECT v.id, v.odometro_inicial, v.odometro_final, v.distancia_gps, v.data_inicio, v.data_fim
                    FROM viagens v 
                    INNER JOIN rota_viagens rv ON v.id = rv.viagem_id 
                    WHERE rv.solicitacao_rota_id = ?
                    ORDER BY v.data_inicio ASC
                ");
                $stmt->execute([$rota['id']]);
                $viagens = $stmt->fetchAll();
                
                $debug[] = [
                    'rota' => $rota,
                    'viagens' => $viagens,
                    'odometro_inicial_rota' => $viagens[0]['odometro_inicial'] ?? null,
                    'odometro_final_rota' => end($viagens)['odometro_final'] ?? null
                ];
            }
            
            resposta(true, $debug, 'Debug - dados brutos');
            break;
            
        default:
            resposta(false, null, 'Ação não encontrada', 404);
    }
    
} catch (Exception $e) {
    error_log("❌ Erro no dashboard-data.php: " . $e->getMessage());
    resposta(false, null, 'Erro interno: ' . $e->getMessage(), 500);
}
?>
