<?php
/**
 * Script Completo de Teste - Sistema de Notificações
 * Testa todo o fluxo: criar solicitação → enviar notificação → verificar
 */

require_once __DIR__ . '/config/bootstrap.php';

use ControleFrotas\Utils\Logger;

echo "🧪 TESTE COMPLETO DO SISTEMA DE NOTIFICAÇÕES\n";
echo "=============================================\n\n";

// 1. Verificar configuração FCM
echo "1. 📱 Verificando configuração FCM...\n";
$fcmKey = Database::queryOne("SELECT valor FROM configuracoes WHERE chave = 'fcm_server_key'");
if ($fcmKey) {
    echo "   ✅ Chave FCM configurada: " . substr($fcmKey['valor'], 0, 20) . "...\n";
} else {
    echo "   ❌ Chave FCM NÃO configurada\n";
    echo "   💡 Execute: INSERT INTO configuracoes (chave, valor) VALUES ('fcm_server_key', 'SUA_CHAVE_FCM');\n";
    exit;
}

// 2. Verificar gestores
echo "\n2. 👥 Verificando gestores...\n";
$gestores = Database::queryAll("SELECT user_id, token FROM fcm_tokens WHERE user_type = 'gestor' AND ativo = TRUE");
if ($gestores) {
    echo "   ✅ " . count($gestores) . " gestores com tokens ativos\n";
    foreach ($gestores as $gestor) {
        echo "   👤 Gestor $gestor[user_id]: " . substr($gestor['token'], 0, 20) . "...\n";
    }
} else {
    echo "   ❌ Nenhum gestor com token ativo\n";
    echo "   💡 Certifique-se de que o app está configurado como 'gestor'\n";
    exit;
}

// 3. Criar solicitação de teste
echo "\n3. 📝 Criando solicitação de teste...\n";
$solicitacaoData = [
    'veiculo_id' => 2,
    'cliente' => 'Empresa Teste Ltda',
    'motivo' => 'Teste de notificação push',
    'km_inicial' => 100,
    'latitude_inicial' => -10.92654,
    'longitude_inicial' => -37.0731133,
    'endereco_inicial' => 'Endereço de teste',
    'cliente_id' => 1,
    'gestor_id' => 2,
    'observacoes' => 'Teste automático de notificação',
    'prioridade' => 'alta'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sistemas.pinheiroempresas.com.br/controlefrota/backend-php/api/gestao/solicitacoes-viagem-simples.php?acao=criar');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($solicitacaoData));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    $responseData = json_decode($response, true);
    if ($responseData['success']) {
        $solicitacaoId = $responseData['data']['solicitacao_id'];
        echo "   ✅ Solicitação criada com ID: $solicitacaoId\n";
    } else {
        echo "   ❌ Erro ao criar solicitação: " . $responseData['message'] . "\n";
        exit;
    }
} else {
    echo "   ❌ Erro HTTP $httpCode: $response\n";
    exit;
}

// 4. Enviar notificação push
echo "\n4. 📨 Enviando notificação push...\n";
$fcmUrl = 'https://fcm.googleapis.com/fcm/send';
$successCount = 0;
$errorCount = 0;

foreach ($gestores as $gestor) {
    $token = $gestor['token'];
    $userId = $gestor['user_id'];
    
    echo "   🎯 Enviando para gestor $userId...\n";
    
    $notificationData = [
        'to' => $token,
        'notification' => [
            'title' => "🚗 NOVA SOLICITAÇÃO DE VIAGEM",
            'body' => "Motorista Administrador solicitou viagem para Empresa Teste Ltda - Teste de notificação push",
            'sound' => 'default',
            'badge' => '1',
            'icon' => 'ic_notification',
            'color' => '#4CAF50',
            'priority' => 'high',
            'android_channel_id' => 'controle_frotas_channel'
        ],
        'data' => [
            'tipo' => 'solicitacao_viagem',
            'solicitacao_id' => $solicitacaoId,
            'tecnico_id' => '4',
            'cliente' => 'Empresa Teste Ltda',
            'motivo' => 'Teste de notificação push',
            'timestamp' => time(),
            'click_action' => 'FLUTTER_NOTIFICATION_CLICK'
        ],
        'priority' => 'high',
        'android' => [
            'priority' => 'high',
            'notification' => [
                'sound' => 'default',
                'channel_id' => 'controle_frotas_channel',
                'priority' => 'high',
                'default_sound' => true,
                'default_vibrate_timings' => true,
                'default_light_settings' => true
            ]
        ]
    ];
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $fcmUrl);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: key=' . $fcmKey['valor'],
        'Content-Type: application/json'
    ]);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notificationData));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode === 200) {
        $responseData = json_decode($response, true);
        if (isset($responseData['success']) && $responseData['success'] == 1) {
            echo "   ✅ Notificação enviada com sucesso!\n";
            $successCount++;
            
            // Registrar no banco
            Database::execute(
                "INSERT INTO notificacoes_push (user_id, user_type, tipo, titulo, mensagem, solicitacao_id, fcm_token, fcm_message_id, fcm_response, enviada, data_envio) 
                 VALUES (?, 'gestor', ?, ?, ?, ?, ?, ?, ?, TRUE, NOW())",
                [
                    $userId,
                    'solicitacao_viagem',
                    '🚗 NOVA SOLICITAÇÃO DE VIAGEM',
                    'Motorista Administrador solicitou viagem para Empresa Teste Ltda - Teste de notificação push',
                    $solicitacaoId,
                    substr($token, 0, 20) . '...',
                    $responseData['results'][0]['message_id'] ?? null,
                    $response
                ]
            );
        } else {
            echo "   ❌ Erro FCM: " . json_encode($responseData) . "\n";
            $errorCount++;
        }
    } else {
        echo "   ❌ Erro HTTP $httpCode: $response\n";
        $errorCount++;
    }
}

// 5. Verificar notificações no banco
echo "\n5. 📊 Verificando notificações no banco...\n";
$notificacoes = Database::queryAll("SELECT COUNT(*) as total FROM notificacoes_push WHERE solicitacao_id = ?", [$solicitacaoId]);
$totalNotificacoes = $notificacoes[0]['total'];
echo "   📨 Total de notificações registradas: $totalNotificacoes\n";

// 6. Resumo final
echo "\n📊 RESUMO FINAL:\n";
echo "================\n";
echo "✅ Solicitação criada: ID $solicitacaoId\n";
echo "✅ Notificações enviadas: $successCount\n";
echo "❌ Erros: $errorCount\n";
echo "📱 Gestores notificados: " . count($gestores) . "\n";
echo "📨 Notificações no banco: $totalNotificacoes\n";

if ($successCount > 0) {
    echo "\n🎉 TESTE CONCLUÍDO COM SUCESSO!\n";
    echo "💡 Verifique o celular do gestor - deve aparecer um popup de notificação.\n";
    echo "📱 A notificação deve aparecer mesmo com o app fechado.\n";
} else {
    echo "\n⚠️ TESTE FALHOU!\n";
    echo "🔧 Verifique:\n";
    echo "   1. Se a chave FCM está correta\n";
    echo "   2. Se os tokens dos gestores são válidos\n";
    echo "   3. Se o app está configurado corretamente\n";
    echo "   4. Se o Firebase está funcionando\n";
}

echo "\n✅ Teste completo finalizado!\n";
?> 
