<?php
/**
 * API SIMPLIFICADA para Listar Solicitações Pendentes do Gestor Logado
 * Versão de debug para identificar problemas
 */

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

// 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' => [
            'solicitacoes_pendentes' => $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 {
    // Verificar método HTTP
    if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
        sendError('Método não permitido', 405);
    }

    // Verificar headers
    $headers = getallheaders();
    $authHeader = $headers['Authorization'] ?? '';
    
    if (empty($authHeader) || !str_starts_with($authHeader, 'Bearer ')) {
        sendError('Token de autorização não fornecido', 401);
    }
    
    $token = substr($authHeader, 7); // Remove "Bearer "
    
    // Decodificar token JWT simples
    $decoded = json_decode(base64_decode($token), true);
    
    if (!$decoded || !isset($decoded['id']) || !isset($decoded['usuario'])) {
        sendError('Token inválido', 401);
    }
    
    // Verificar se o token expirou
    if (isset($decoded['exp']) && $decoded['exp'] < time()) {
        sendError('Token expirado', 401);
    }
    
    // Conectar ao banco
    $pdo = getConnection();
    if (!$pdo) {
        sendError('Erro de conexão com banco de dados', 500);
    }
    
    // Buscar gestor pelo ID e usuário do token
    $sql = "SELECT id, nome, email, usuario, nivel_acesso 
            FROM gestores 
            WHERE id = ? AND usuario = ? AND (nivel_acesso = 'gestor' OR nivel_acesso = 'admin')
            AND status = 'ativo'";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$decoded['id'], $decoded['usuario']]);
    $gestor = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$gestor) {
        sendError('Token inválido ou gestor não encontrado', 401);
    }
    
    $gestorId = $gestor['id'];
    
    // Listar apenas as solicitações pendentes do gestor logado
    $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,
                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,
                COALESCE(sv.gestor_id, 0) as gestor_id,
                DATE_FORMAT(sv.created_at, '%Y-%m-%d %H:%i:%s') as data_solicitacao,
                TIMESTAMPDIFF(MINUTE, sv.created_at, NOW()) as tempo_espera_minutos
            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.status = 'pendente' AND sv.gestor_id = ?
            ORDER BY sv.prioridade DESC, sv.created_at ASC";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([$gestorId]);
    $solicitacoes = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Resposta de sucesso
    sendSuccess($solicitacoes, "Solicitações do gestor listadas com sucesso");

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