<?php
/**
 * Script para forçar sincronização de token FCM
 * Este script simula o registro de um token FCM para testes
 */

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

use ControleFrotas\Config\Database;
use ControleFrotas\Utils\Logger;

echo "🔄 FORÇANDO SINCRONIZAÇÃO DE TOKEN FCM\n";
echo "=====================================\n\n";

try {
    // 1. Verificar se a tabela fcm_tokens existe
    echo "1. Verificando tabela fcm_tokens...\n";
    
    $tabelaExiste = Database::queryOne(
        "SELECT COUNT(*) as total FROM information_schema.tables 
         WHERE table_schema = DATABASE() AND table_name = 'fcm_tokens'"
    );
    
    if ($tabelaExiste['total'] == 0) {
        echo "❌ Tabela fcm_tokens não existe!\n";
        echo "Criando tabela...\n";
        
        $sql = "CREATE TABLE fcm_tokens (
            id INT AUTO_INCREMENT PRIMARY KEY,
            user_id VARCHAR(100) NOT NULL,
            token TEXT NOT NULL,
            device_id VARCHAR(255),
            device_name VARCHAR(255),
            app_version VARCHAR(50),
            platform VARCHAR(50) 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,
            UNIQUE KEY unique_user_device (user_id, device_id),
            INDEX idx_user_id (user_id),
            INDEX idx_ativo (ativo)
        )";
        
        Database::execute($sql);
        echo "✅ Tabela fcm_tokens criada com sucesso!\n";
    } else {
        echo "✅ Tabela fcm_tokens existe\n";
    }
    
    // 2. Inserir token de teste
    echo "\n2. Inserindo token de teste...\n";
    
    $userId = "admin";
    $token = "test_token_" . time() . "_" . rand(1000, 9999);
    $deviceId = "test_device_" . rand(100000, 999999);
    $deviceName = "Test Device";
    $appVersion = "1.0.0";
    $platform = "android";
    
    // Desativar tokens antigos do mesmo dispositivo
    Database::execute(
        "UPDATE fcm_tokens SET ativo = FALSE 
         WHERE user_id = ? AND device_id = ?",
        [$userId, $deviceId]
    );
    
    // Inserir novo token
    $sql = "INSERT INTO fcm_tokens 
            (user_id, token, device_id, device_name, app_version, platform, ativo, ultimo_uso)
            VALUES (?, ?, ?, ?, ?, ?, TRUE, NOW())
            ON DUPLICATE KEY UPDATE 
            token = VALUES(token),
            device_name = VALUES(device_name),
            app_version = VALUES(app_version),
            ativo = TRUE,
            ultimo_uso = NOW()";
    
    Database::execute($sql, [
        $userId, $token, $deviceId, $deviceName, $appVersion, $platform
    ]);
    
    echo "✅ Token de teste inserido:\n";
    echo "   - User ID: $userId\n";
    echo "   - Token: $token\n";
    echo "   - Device ID: $deviceId\n";
    echo "   - Platform: $platform\n";
    
    // 3. Verificar tokens ativos
    echo "\n3. Verificando tokens ativos...\n";
    
    $tokens = Database::query(
        "SELECT user_id, device_id, device_name, platform, ultimo_uso 
         FROM fcm_tokens WHERE ativo = TRUE"
    );
    
    echo "📊 Tokens ativos encontrados: " . count($tokens) . "\n";
    
    foreach ($tokens as $tokenData) {
        echo "   - User: {$tokenData['user_id']} | Device: {$tokenData['device_id']} | Platform: {$tokenData['platform']}\n";
    }
    
    // 4. Testar envio de notificação
    echo "\n4. Testando envio de notificação...\n";
    
    $titulo = "Teste de Sincronização";
    $mensagem = "Token FCM sincronizado com sucesso! " . date('H:i:s');
    
    // Inserir notificação no banco
    Database::execute(
        "INSERT INTO notificacoes_push 
         (user_id, tipo, titulo, mensagem) 
         VALUES (?, 'teste', ?, ?)",
        [$userId, $titulo, $mensagem]
    );
    
    $notificacaoId = Database::lastInsertId();
    echo "✅ Notificação de teste criada (ID: $notificacaoId)\n";
    
    // 5. Verificar notificações
    echo "\n5. Verificando notificações...\n";
    
    $notificacoes = Database::query(
        "SELECT id, tipo, titulo, mensagem, created_at 
         FROM notificacoes_push 
         WHERE user_id = ? 
         ORDER BY created_at DESC 
         LIMIT 5",
        [$userId]
    );
    
    echo "📋 Últimas notificações:\n";
    foreach ($notificacoes as $notif) {
        echo "   - ID: {$notif['id']} | Tipo: {$notif['tipo']} | Título: {$notif['titulo']}\n";
    }
    
    echo "\n🎉 SINCRONIZAÇÃO CONCLUÍDA COM SUCESSO!\n";
    echo "========================================\n";
    echo "✅ Tabela fcm_tokens verificada/criada\n";
    echo "✅ Token de teste inserido\n";
    echo "✅ Notificação de teste criada\n";
    echo "✅ Sistema pronto para receber tokens do app\n\n";
    
    echo "📱 PRÓXIMOS PASSOS:\n";
    echo "1. Reinstale o app Android\n";
    echo "2. Configure como 'Gestor' na instalação\n";
    echo "3. Verifique os logs no Android Studio\n";
    echo "4. Use o botão 'Registrar Token FCM' nas configurações\n";
    
} catch (Exception $e) {
    echo "❌ ERRO: " . $e->getMessage() . "\n";
    Logger::error('Erro no script de sincronização', [
        'error' => $e->getMessage(),
        'trace' => $e->getTraceAsString()
    ]);
}
?> 
