<?php
/**
 * API para Listar Solicitações do Motorista - Versão Simplificada
 */

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';

// Função para conectar ao banco
function getConnection() {
    global $host, $dbname, $username, $password;
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (Exception $e) {
        return null;
    }
}

// Função para enviar resposta de sucesso
function sendSuccess($data, $message = 'Sucesso') {
    echo json_encode([
        'success' => true,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message,
        'data' => $data
    ]);
    exit;
}

// Função para enviar resposta de erro
function sendError($message, $code = 400) {
    http_response_code($code);
    echo json_encode([
        'success' => false,
        'timestamp' => date('Y-m-d H:i:s'),
        'message' => $message
    ]);
    exit;
}

try {
    // Conectar ao banco
    $pdo = getConnection();
    if (!$pdo) {
        sendError('Erro de conexão com banco de dados', 500);
    }

    // Verificar método HTTP
    if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
        sendError('Método não permitido', 405);
    }

    // Obter ID do motorista  
    $motoristaId = $_GET['motorista_id'] ?? '1'; // Usar ID 1 que é o admin logado
    
    // DEBUG: Log da consulta
    error_log("DEBUG: Buscando solicitações para motorista ID: $motoristaId");
    
    // Query unificada para solicitações de viagem e rota
    $sql = "(
                SELECT 
                    sv.id,
                    sv.tecnico_id,
                    COALESCE(m.nome, 'Motorista') as tecnico_nome,
                    sv.veiculo_id,
                    COALESCE(v.modelo, 'Veículo') as veiculo_modelo,
                    COALESCE(v.placa, 'ABC-1234') as veiculo_placa,
                    sv.cliente,
                    sv.motivo,
                    sv.km_inicial as odometro_inicial,
                    COALESCE(sv.latitude_inicial, 0) as latitude_inicial,
                    COALESCE(sv.longitude_inicial, 0) as longitude_inicial,
                    COALESCE(sv.endereco_inicial, 'Endereço não informado') as endereco_inicial,
                    COALESCE(sv.cliente_id, 0) as cliente_id,
                    COALESCE(sv.status, 'pendente') as status,
                    COALESCE(sv.observacoes, '') as observacoes,
                    COALESCE(sv.prioridade, 'normal') as prioridade,
                    DATE_FORMAT(sv.created_at, '%Y-%m-%d %H:%i:%s') as data_solicitacao,
                    TIMESTAMPDIFF(MINUTE, sv.created_at, NOW()) as tempo_espera_minutos,
                    'viagem' as tipo_solicitacao,
                    NULL as titulo_rota,
                    NULL as total_clientes
                FROM solicitacoes_viagem sv
                LEFT JOIN motoristas m ON sv.tecnico_id = m.id
                LEFT JOIN veiculos v ON sv.veiculo_id = v.id
                WHERE sv.tecnico_id = ? AND sv.status IN ('pendente', 'aprovada', 'negada')
            )
            UNION ALL
            (
                SELECT 
                    sr.id,
                    sr.motorista_id as tecnico_id,
                    COALESCE(m.nome, 'Motorista') as tecnico_nome,
                    sr.veiculo_id,
                    COALESCE(v.modelo, 'Veículo') as veiculo_modelo,
                    COALESCE(v.placa, 'ABC-1234') as veiculo_placa,
                    sr.titulo as cliente,
                    COALESCE(sr.descricao, 'Rota com múltiplos clientes') as motivo,
                    0 as odometro_inicial,
                    0 as latitude_inicial,
                    0 as longitude_inicial,
                    'Múltiplos endereços' as endereco_inicial,
                    0 as cliente_id,
                    COALESCE(sr.status, 'pendente') as status,
                    CAST((SELECT COUNT(*) FROM rota_clientes rc WHERE rc.solicitacao_rota_id = sr.id) AS CHAR) as observacoes,
                    COALESCE(sr.prioridade, 'normal') as prioridade,
                    DATE_FORMAT(sr.created_at, '%Y-%m-%d %H:%i:%s') as data_solicitacao,
                    TIMESTAMPDIFF(MINUTE, sr.created_at, NOW()) as tempo_espera_minutos,
                    'rota' as tipo_solicitacao,
                    sr.titulo as titulo_rota,
                    (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.motorista_id = ? AND sr.status IN ('pendente', 'aprovada') AND sr.status != 'concluida'
            )
            ORDER BY data_solicitacao DESC
            LIMIT 20";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([$motoristaId, $motoristaId]); // Dois parâmetros para as duas queries
    $solicitacoes = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    // DEBUG: Log dos resultados
    error_log("DEBUG: Encontradas " . count($solicitacoes) . " solicitações");
    if (count($solicitacoes) > 0) {
        error_log("DEBUG: Primeira solicitação: " . json_encode($solicitacoes[0]));
    }

    // Estatísticas
    $total = count($solicitacoes);
    $aprovadas = count(array_filter($solicitacoes, function($s) { return $s['status'] === 'aprovada'; }));
    $negadas = count(array_filter($solicitacoes, function($s) { return $s['status'] === 'negada'; }));
    $pendentes = count(array_filter($solicitacoes, function($s) { return $s['status'] === 'pendente'; }));

    // Resposta de sucesso
    sendSuccess([
        'solicitacoes' => $solicitacoes,
        'estatisticas' => [
            'total' => $total,
            'aprovadas' => $aprovadas,
            'negadas' => $negadas,
            'pendentes' => $pendentes
        ]
    ]);

} catch (Exception $e) {
    sendError('Erro interno: ' . $e->getMessage(), 500);
}
?> 
