<?php
/**
 * Script de Teste - Registrar Token FCM Manualmente
 * Testa o registro de tokens FCM no servidor
 */

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

use ControleFrotas\Utils\Logger;

echo "🔧 TESTE DE REGISTRO DE TOKEN FCM\n";
echo "==================================\n\n";

// Verificar se a tabela existe
$tabelaExiste = Database::queryOne("SHOW TABLES LIKE 'fcm_tokens'");

if (!$tabelaExiste) {
    echo "❌ Tabela fcm_tokens não existe\n";
    echo "💡 Criando tabela...\n";
    
    $sql = "CREATE TABLE IF NOT EXISTS fcm_tokens (
        id INT AUTO_INCREMENT PRIMARY KEY,
        user_id VARCHAR(50) NOT NULL,
        user_type ENUM('gestor', 'motorista') NOT NULL,
        token VARCHAR(500) NOT NULL,
        device_id VARCHAR(100) NULL,
        device_name VARCHAR(100) DEFAULT 'Android Device',
        app_version VARCHAR(20) DEFAULT '1.0.0',
        platform VARCHAR(20) DEFAULT 'android',
        ativo BOOLEAN DEFAULT TRUE,
        ultimo_uso TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        
        INDEX idx_user_id (user_id),
        INDEX idx_user_type (user_type),
        INDEX idx_token (token(100)),
        INDEX idx_ativo (ativo),
        UNIQUE KEY unique_user_token (user_id, token(100))
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
    
    Database::execute($sql);
    echo "✅ Tabela fcm_tokens criada!\n\n";
}

// Dados de teste
$testData = [
    'user_id' => 'admin',
    'user_type' => 'gestor',
    'token' => 'test_token_fcm_' . time(), // Token de teste
    'device_id' => 'test_device_' . time(),
    'device_name' => 'Samsung Galaxy S21 (Teste)',
    'app_version' => '1.0.0',
    'platform' => 'android'
];

echo "📱 Registrando token de teste...\n";
echo "   User ID: {$testData['user_id']}\n";
echo "   User Type: {$testData['user_type']}\n";
echo "   Device ID: {$testData['device_id']}\n";
echo "   Token: {$testData['token']}\n\n";

try {
    // Verificar se já existe um registro para este usuário
    $existing = Database::queryOne(
        "SELECT id FROM fcm_tokens WHERE user_id = ?",
        [$testData['user_id']]
    );
    
    if ($existing) {
        echo "🔄 Atualizando registro existente...\n";
        
        $sql = "UPDATE fcm_tokens SET 
                token = ?, 
                user_type = ?, 
                device_id = ?, 
                device_name = ?, 
                app_version = ?, 
                platform = ?, 
                ativo = TRUE, 
                ultimo_uso = NOW() 
                WHERE user_id = ?";
        
        Database::execute($sql, [
            $testData['token'],
            $testData['user_type'],
            $testData['device_id'],
            $testData['device_name'],
            $testData['app_version'],
            $testData['platform'],
            $testData['user_id']
        ]);
        
        echo "✅ Registro atualizado com sucesso!\n";
    } else {
        echo "➕ Criando novo registro...\n";
        
        $sql = "INSERT INTO fcm_tokens 
                (user_id, user_type, token, device_id, device_name, app_version, platform, ativo) 
                VALUES (?, ?, ?, ?, ?, ?, ?, TRUE)";
        
        Database::execute($sql, [
            $testData['user_id'],
            $testData['user_type'],
            $testData['token'],
            $testData['device_id'],
            $testData['device_name'],
            $testData['app_version'],
            $testData['platform']
        ]);
        
        echo "✅ Registro criado com sucesso!\n";
    }
    
    // Verificar registros após inserção
    echo "\n📊 Verificando registros após inserção...\n";
    $total = Database::queryOne("SELECT COUNT(*) as total FROM fcm_tokens")['total'];
    echo "   Total de registros: $total\n";
    
    $gestores = Database::queryOne("SELECT COUNT(*) as total FROM fcm_tokens WHERE user_type = 'gestor'")['total'];
    echo "   Gestores registrados: $gestores\n";
    
    $motoristas = Database::queryOne("SELECT COUNT(*) as total FROM fcm_tokens WHERE user_type = 'motorista'")['total'];
    echo "   Motoristas registrados: $motoristas\n";
    
    // Listar registros
    echo "\n📋 Registros na tabela:\n";
    $registros = Database::queryAll("SELECT * FROM fcm_tokens ORDER BY created_at DESC");
    
    if (empty($registros)) {
        echo "❌ Nenhum registro encontrado\n";
    } else {
        foreach ($registros as $registro) {
            echo "   ID: {$registro['id']}\n";
            echo "   User ID: {$registro['user_id']}\n";
            echo "   User Type: {$registro['user_type']}\n";
            echo "   Device ID: {$registro['device_id']}\n";
            echo "   Token: " . substr($registro['token'], 0, 30) . "...\n";
            echo "   Ativo: " . ($registro['ativo'] ? 'Sim' : 'Não') . "\n";
            echo "   Criado: {$registro['created_at']}\n";
            echo "   ---\n";
        }
    }
    
    echo "\n✅ Teste de registro concluído com sucesso!\n";
    echo "💡 Agora você pode testar o envio de notificações\n";
    
} catch (Exception $e) {
    echo "❌ Erro ao registrar token: " . $e->getMessage() . "\n";
    echo "📋 Stack trace:\n" . $e->getTraceAsString() . "\n";
}
?> 
