<?php
require_once '../config/bootstrap.php';

// Configurações do Firebase
$firebase_server_key = "AAAAYourFirebaseServerKeyHere"; // Substitua pela sua chave do Firebase
$firebase_url = "https://fcm.googleapis.com/fcm/send";

// Função para enviar notificação push
function enviarNotificacaoPush($token, $titulo, $mensagem, $dados = []) {
    global $firebase_server_key, $firebase_url;
    
    $payload = [
        "to" => $token,
        "notification" => [
            "title" => $titulo,
            "body" => $mensagem,
            "sound" => "default",
            "badge" => "1",
            "click_action" => "FLUTTER_NOTIFICATION_CLICK"
        ],
        "data" => array_merge([
            "titulo" => $titulo,
            "mensagem" => $mensagem,
            "tipo" => "solicitacao_viagem",
            "timestamp" => time()
        ], $dados),
        "priority" => "high",
        "content_available" => true
    ];
    
    $headers = [
        "Authorization: key=" . $firebase_server_key,
        "Content-Type: application/json"
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $firebase_url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    return [
        "success" => $http_code == 200,
        "response" => $response,
        "http_code" => $http_code
    ];
}

// Função para buscar tokens FCM de gestores
function buscarTokensGestores() {
    global $pdo;
    
    $sql = "SELECT DISTINCT fcm_token, user_id, user_type 
            FROM fcm_tokens 
            WHERE user_type = 'gestor' 
            AND fcm_token IS NOT NULL 
            AND fcm_token != ''";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// Função para buscar tokens FCM de motoristas
function buscarTokensMotoristas() {
    global $pdo;
    
    $sql = "SELECT DISTINCT fcm_token, user_id, user_type 
            FROM fcm_tokens 
            WHERE user_type = 'motorista' 
            AND fcm_token IS NOT NULL 
            AND fcm_token != ''";
    
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

// Função para criar notificação no banco
function criarNotificacao($userId, $userType, $titulo, $mensagem, $tipo = "geral", $dados = []) {
    global $pdo;
    
    $sql = "INSERT INTO notificacoes (user_id, user_type, titulo, mensagem, tipo, dados, data_envio, lida) 
            VALUES (?, ?, ?, ?, ?, ?, NOW(), 0)";
    
    $stmt = $pdo->prepare($sql);
    $dadosJson = json_encode($dados);
    
    return $stmt->execute([$userId, $userType, $titulo, $mensagem, $tipo, $dadosJson]);
}

// Função para criar solicitação de teste
function criarSolicitacaoTeste() {
    global $pdo;
    
    $sql = "INSERT INTO solicitacoes_viagem 
            (tecnico_id, veiculo_id, cliente, motivo, km_inicial, latitude_inicial, longitude_inicial, 
             endereco_inicial, gestor_id, observacoes, prioridade, status, data_solicitacao) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())";
    
    $stmt = $pdo->prepare($sql);
    
    return $stmt->execute([
        "1", // tecnico_id
        "1", // veiculo_id  
        "Empresa Teste Ltda", // cliente
        "Teste de notificação push", // motivo
        "100", // km_inicial
        "-10.9091", // latitude_inicial
        "-37.0677", // longitude_inicial
        "Aracaju, SE", // endereco_inicial
        "2", // gestor_id
        "Solicitação criada para testar notificações push", // observacoes
        "normal", // prioridade
        "pendente" // status
    ]);
}

// Função principal de teste
function testarNotificacoesPush() {
    echo "🚀 TESTE DE NOTIFICAÇÕES PUSH\n";
    echo "================================\n\n";
    
    // 1. Verificar tokens disponíveis
    echo "1. 📱 Verificando tokens FCM...\n";
    $tokensGestores = buscarTokensGestores();
    $tokensMotoristas = buscarTokensMotoristas();
    
    echo "   Gestores com token: " . count($tokensGestores) . "\n";
    echo "   Motoristas com token: " . count($tokensMotoristas) . "\n\n";
    
    if (empty($tokensGestores) && empty($tokensMotoristas)) {
        echo "❌ Nenhum token FCM encontrado!\n";
        echo "   Para testar, primeiro registre um dispositivo no app.\n\n";
        return;
    }
    
    // 2. Criar solicitação de teste
    echo "2. 📝 Criando solicitação de teste...\n";
    $solicitacaoId = null;
    
    try {
        criarSolicitacaoTeste();
        $solicitacaoId = $pdo->lastInsertId();
        echo "   ✅ Solicitação criada com ID: $solicitacaoId\n\n";
    } catch (Exception $e) {
        echo "   ❌ Erro ao criar solicitação: " . $e->getMessage() . "\n\n";
        return;
    }
    
    // 3. Enviar notificação para gestores
    echo "3. 🔔 Enviando notificação para gestores...\n";
    $gestoresNotificados = 0;
    
    foreach ($tokensGestores as $token) {
        $titulo = "🚗 Nova Solicitação de Viagem";
        $mensagem = "Empresa Teste Ltda solicitou uma viagem para 'Teste de notificação push'";
        
        $dados = [
            "solicitacao_id" => $solicitacaoId,
            "gestor_id" => $token['user_id'],
            "cliente" => "Empresa Teste Ltda",
            "motivo" => "Teste de notificação push"
        ];
        
        $resultado = enviarNotificacaoPush($token['fcm_token'], $titulo, $mensagem, $dados);
        
        if ($resultado['success']) {
            echo "   ✅ Enviada para gestor {$token['user_id']}\n";
            criarNotificacao($token['user_id'], 'gestor', $titulo, $mensagem, 'solicitacao_viagem', $dados);
            $gestoresNotificados++;
        } else {
            echo "   ❌ Falha para gestor {$token['user_id']}: {$resultado['response']}\n";
        }
    }
    
    echo "   📊 Total de gestores notificados: $gestoresNotificados\n\n";
    
    // 4. Enviar notificação para motoristas (opcional)
    if (!empty($tokensMotoristas)) {
        echo "4. 🔔 Enviando notificação para motoristas...\n";
        $motoristasNotificados = 0;
        
        foreach ($tokensMotoristas as $token) {
            $titulo = "✅ Solicitação Aprovada";
            $mensagem = "Sua solicitação foi aprovada! Você pode iniciar a viagem.";
            
            $dados = [
                "solicitacao_id" => $solicitacaoId,
                "motorista_id" => $token['user_id'],
                "status" => "aprovada"
            ];
            
            $resultado = enviarNotificacaoPush($token['fcm_token'], $titulo, $mensagem, $dados);
            
            if ($resultado['success']) {
                echo "   ✅ Enviada para motorista {$token['user_id']}\n";
                criarNotificacao($token['user_id'], 'motorista', $titulo, $mensagem, 'aprovacao_viagem', $dados);
                $motoristasNotificados++;
            } else {
                echo "   ❌ Falha para motorista {$token['user_id']}: {$resultado['response']}\n";
            }
        }
        
        echo "   📊 Total de motoristas notificados: $motoristasNotificados\n\n";
    }
    
    // 5. Resumo final
    echo "5. 📊 RESUMO FINAL\n";
    echo "   =================\n";
    echo "   📝 Solicitação criada: ID $solicitacaoId\n";
    echo "   🔔 Gestores notificados: $gestoresNotificados\n";
    echo "   📱 Total de tokens: " . (count($tokensGestores) + count($tokensMotoristas)) . "\n";
    echo "   ✅ Teste concluído!\n\n";
    
    echo "💡 DICAS:\n";
    echo "   - Verifique se o app está instalado no dispositivo\n";
    echo "   - Confirme se as notificações estão habilitadas no Android\n";
    echo "   - Teste com o app fechado para verificar push real\n";
    echo "   - Verifique os logs do app para debug\n\n";
}

// Executar teste se chamado diretamente
if (basename(__FILE__) == basename($_SERVER['SCRIPT_NAME'])) {
    testarNotificacoesPush();
}
?> 
