<?php
/**
 * ARQUIVO DE TESTE E DIAGNÓSTICO COMPLETO
 * Testa os três endpoints de pagamento e identifica erros específicos
 * 
 * ACESSE: http://seudominio.com/backend/teste_backend_apis.php
 */

// Ativar exibição de erros para diagnóstico
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Header HTML para melhor visualização
header('Content-Type: text/html; charset=utf-8');

?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Teste Backend APIs - Diagnóstico Completo</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            padding: 20px;
            color: #333;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
            background: white;
            border-radius: 10px;
            padding: 30px;
            box-shadow: 0 10px 40px rgba(0,0,0,0.2);
        }
        h1 {
            color: #667eea;
            margin-bottom: 10px;
            border-bottom: 3px solid #667eea;
            padding-bottom: 10px;
        }
        h2 {
            color: #764ba2;
            margin-top: 30px;
            margin-bottom: 15px;
            padding: 10px;
            background: #f5f5f5;
            border-left: 4px solid #764ba2;
        }
        .test-section {
            margin: 20px 0;
            padding: 20px;
            border: 2px solid #e0e0e0;
            border-radius: 8px;
            background: #fafafa;
        }
        .success {
            background: #d4edda;
            border-color: #28a745;
            color: #155724;
        }
        .error {
            background: #f8d7da;
            border-color: #dc3545;
            color: #721c24;
        }
        .warning {
            background: #fff3cd;
            border-color: #ffc107;
            color: #856404;
        }
        .info {
            background: #d1ecf1;
            border-color: #17a2b8;
            color: #0c5460;
        }
        pre {
            background: #2d2d2d;
            color: #f8f8f2;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
            margin: 10px 0;
            font-size: 13px;
            line-height: 1.5;
        }
        .status-badge {
            display: inline-block;
            padding: 5px 15px;
            border-radius: 20px;
            font-weight: bold;
            margin: 5px;
        }
        .status-ok { background: #28a745; color: white; }
        .status-error { background: #dc3545; color: white; }
        .status-warning { background: #ffc107; color: #333; }
        .btn-test {
            display: inline-block;
            padding: 10px 20px;
            background: #667eea;
            color: white;
            text-decoration: none;
            border-radius: 5px;
            margin: 10px 5px;
            cursor: pointer;
            border: none;
            font-size: 14px;
        }
        .btn-test:hover { background: #5568d3; }
        .endpoint-result {
            margin: 15px 0;
            padding: 15px;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔍 Teste Completo de Backend APIs</h1>
        <p><strong>Data/Hora:</strong> <?php echo date('d/m/Y H:i:s'); ?></p>
        
        <?php
        // ============================================================
        // TESTE 1: Verificar Dependências Básicas
        // ============================================================
        echo '<h2>1️⃣ Verificação de Dependências</h2>';
        echo '<div class="test-section">';
        
        $dependencies = [
            'vendor/autoload.php' => __DIR__ . '/../vendor/autoload.php',
            'config/config_db.php' => __DIR__ . '/../config/config_db.php',
            'config/token.php' => __DIR__ . '/../config/token.php',
        ];
        
        $allDepsOk = true;
        foreach ($dependencies as $name => $path) {
            $exists = file_exists($path);
            $readable = $exists && is_readable($path);
            
            echo '<div class="' . ($exists && $readable ? 'success' : 'error') . '" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
            echo '<strong>' . $name . ':</strong> ';
            if ($exists && $readable) {
                echo '<span class="status-badge status-ok">✓ Existe e é legível</span>';
            } else {
                echo '<span class="status-badge status-error">✗ ' . ($exists ? 'Existe mas não é legível' : 'NÃO ENCONTRADO') . '</span>';
                echo '<br><small>Caminho esperado: ' . htmlspecialchars($path) . '</small>';
                $allDepsOk = false;
            }
            echo '</div>';
        }
        
        echo '</div>';
        
        // ============================================================
        // TESTE 2: Verificar Autoload e Classes do SDK
        // ============================================================
        echo '<h2>2️⃣ Verificação do SDK Mercado Pago</h2>';
        echo '<div class="test-section">';
        
        if ($allDepsOk) {
            try {
                require_once __DIR__ . '/../vendor/autoload.php';
                echo '<div class="success" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<span class="status-badge status-ok">✓ Autoload carregado com sucesso</span>';
                echo '</div>';
                
                // Verificar classes do SDK
                $sdkClasses = [
                    'MercadoPago\\Client\\Payment\\PaymentClient',
                    'MercadoPago\\Client\\Common\\RequestOptions',
                    'MercadoPago\\MercadoPagoConfig',
                    'MercadoPago\\Exceptions\\MPApiException'
                ];
                
                foreach ($sdkClasses as $class) {
                    $exists = class_exists($class) || interface_exists($class);
                    echo '<div class="' . ($exists ? 'success' : 'error') . '" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                    echo '<strong>' . htmlspecialchars($class) . ':</strong> ';
                    if ($exists) {
                        echo '<span class="status-badge status-ok">✓ Disponível</span>';
                    } else {
                        echo '<span class="status-badge status-error">✗ NÃO ENCONTRADA</span>';
                    }
                    echo '</div>';
                }
            } catch (Exception $e) {
                echo '<div class="error" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<span class="status-badge status-error">✗ Erro ao carregar autoload</span>';
                echo '<pre>' . htmlspecialchars($e->getMessage()) . '</pre>';
                echo '</div>';
            }
        } else {
            echo '<div class="warning" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
            echo '<span class="status-badge status-warning">⚠ Pulando teste de SDK - Dependências faltando</span>';
            echo '</div>';
        }
        
        echo '</div>';
        
        // ============================================================
        // TESTE 3: Verificar Configuração (Token e DB)
        // ============================================================
        echo '<h2>3️⃣ Verificação de Configuração</h2>';
        echo '<div class="test-section">';
        
        if ($allDepsOk) {
            try {
                // Testar token
                require_once __DIR__ . '/../config/token.php';
                $tokenDefined = defined('ACCESS_TOKEN');
                $tokenValue = $tokenDefined ? ACCESS_TOKEN : null;
                $tokenValid = $tokenDefined && !empty($tokenValue) && strlen($tokenValue) > 10;
                
                echo '<div class="' . ($tokenValid ? 'success' : 'error') . '" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<strong>ACCESS_TOKEN:</strong> ';
                if ($tokenValid) {
                    echo '<span class="status-badge status-ok">✓ Definido e válido</span>';
                    echo '<br><small>Token: ' . substr($tokenValue, 0, 20) . '...' . substr($tokenValue, -10) . ' (comprimento: ' . strlen($tokenValue) . ')</small>';
                } else {
                    echo '<span class="status-badge status-error">✗ ' . ($tokenDefined ? 'Definido mas vazio/inválido' : 'NÃO DEFINIDO') . '</span>';
                }
                echo '</div>';
                
                // Testar conexão DB
                require_once __DIR__ . '/../config/config_db.php';
                $dbConnected = isset($pdo) && $pdo instanceof PDO;
                
                echo '<div class="' . ($dbConnected ? 'success' : 'error') . '" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<strong>Conexão com Banco de Dados:</strong> ';
                if ($dbConnected) {
                    echo '<span class="status-badge status-ok">✓ Conectado</span>';
                    try {
                        $testQuery = $pdo->query("SELECT 1");
                        echo ' <span class="status-badge status-ok">✓ Query de teste OK</span>';
                    } catch (PDOException $e) {
                        echo ' <span class="status-badge status-error">✗ Erro na query: ' . htmlspecialchars($e->getMessage()) . '</span>';
                    }
                } else {
                    echo '<span class="status-badge status-error">✗ NÃO CONECTADO</span>';
                    echo '<br><small>Variável $pdo não está definida ou não é uma instância de PDO</small>';
                }
                echo '</div>';
            } catch (Exception $e) {
                echo '<div class="error" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<span class="status-badge status-error">✗ Erro ao carregar configuração</span>';
                echo '<pre>' . htmlspecialchars($e->getMessage()) . "\n" . htmlspecialchars($e->getTraceAsString()) . '</pre>';
                echo '</div>';
            }
        } else {
            echo '<div class="warning" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
            echo '<span class="status-badge status-warning">⚠ Pulando teste de configuração - Dependências faltando</span>';
            echo '</div>';
        }
        
        echo '</div>';
        
        // ============================================================
        // TESTE 4: Testar Cada Endpoint Individualmente
        // ============================================================
        echo '<h2>4️⃣ Teste de Endpoints (Simulação)</h2>';
        echo '<div class="test-section">';
        
        $endpoints = [
            'process_payment.php' => 'Cartão de Crédito',
            'process_payment_pix.php' => 'PIX',
            'process_payment_boleto_mercadopago.php' => 'Boleto'
        ];
        
        foreach ($endpoints as $file => $name) {
            echo '<h3 style="color: #667eea; margin-top: 20px;">📄 ' . htmlspecialchars($name) . ' (' . htmlspecialchars($file) . ')</h3>';
            echo '<div class="endpoint-result">';
            
            $filePath = __DIR__ . '/' . $file;
            $fileExists = file_exists($filePath);
            
            if (!$fileExists) {
                echo '<div class="error" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<span class="status-badge status-error">✗ Arquivo não encontrado</span>';
                echo '<br><small>Caminho: ' . htmlspecialchars($filePath) . '</small>';
                echo '</div>';
                continue;
            }
            
            echo '<div class="success" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
            echo '<span class="status-badge status-ok">✓ Arquivo existe</span>';
            echo '</div>';
            
            // Tentar analisar o arquivo para erros de sintaxe
            $syntaxCheck = shell_exec('php -l ' . escapeshellarg($filePath) . ' 2>&1');
            if (strpos($syntaxCheck, 'No syntax errors') !== false) {
                echo '<div class="success" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<span class="status-badge status-ok">✓ Sintaxe PHP válida</span>';
                echo '</div>';
            } else {
                echo '<div class="error" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<span class="status-badge status-error">✗ Erro de sintaxe detectado</span>';
                echo '<pre>' . htmlspecialchars($syntaxCheck) . '</pre>';
                echo '</div>';
            }
            
            // Ler primeiras linhas para verificar imports
            $fileContent = file_get_contents($filePath);
            $hasAutoload = strpos($fileContent, 'autoload.php') !== false;
            $hasConfigDb = strpos($fileContent, 'config_db.php') !== false;
            $hasToken = strpos($fileContent, 'token.php') !== false;
            $hasMercadoPagoConfig = strpos($fileContent, 'MercadoPagoConfig') !== false;
            
            echo '<div class="info" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
            echo '<strong>Verificação de Imports:</strong><br>';
            echo ($hasAutoload ? '✓' : '✗') . ' autoload.php<br>';
            echo ($hasConfigDb ? '✓' : '✗') . ' config_db.php<br>';
            echo ($hasToken ? '✓' : '✗') . ' token.php<br>';
            echo ($hasMercadoPagoConfig ? '✓' : '✗') . ' MercadoPagoConfig<br>';
            echo '</div>';
            
            // Verificar se há erros comuns
            $commonErrors = [];
            if (strpos($fileContent, '$pdo') !== false && !$hasConfigDb) {
                $commonErrors[] = 'Usa $pdo mas não importa config_db.php';
            }
            if (strpos($fileContent, 'ACCESS_TOKEN') !== false && !$hasToken) {
                $commonErrors[] = 'Usa ACCESS_TOKEN mas não importa token.php';
            }
            if (strpos($fileContent, 'PaymentClient') !== false && !$hasAutoload) {
                $commonErrors[] = 'Usa PaymentClient mas não importa autoload.php';
            }
            
            if (!empty($commonErrors)) {
                echo '<div class="warning" style="padding: 10px; margin: 5px 0; border-radius: 5px;">';
                echo '<strong>⚠ Possíveis Problemas:</strong><br>';
                foreach ($commonErrors as $error) {
                    echo '• ' . htmlspecialchars($error) . '<br>';
                }
                echo '</div>';
            }
            
            echo '</div>';
        }
        
        echo '</div>';
        
        // ============================================================
        // TESTE 5: Teste Real de Requisição (Opcional)
        // ============================================================
        echo '<h2>5️⃣ Teste Real de Requisição HTTP</h2>';
        echo '<div class="test-section">';
        echo '<p><strong>Nota:</strong> Este teste requer que você execute manualmente via cURL ou Postman.</p>';
        echo '<p>Para testar cada endpoint, use:</p>';
        echo '<pre>';
        echo 'curl -X POST http://seudominio.com/backend/process_payment.php \\' . "\n";
        echo '  -H "Content-Type: application/json" \\' . "\n";
        echo '  -d \'{"transaction_amount": 100.00, "description": "Teste", ...}\'';
        echo '</pre>';
        echo '</div>';
        
        // ============================================================
        // RESUMO FINAL
        // ============================================================
        echo '<h2>📊 Resumo do Diagnóstico</h2>';
        echo '<div class="test-section">';
        echo '<p><strong>Status Geral:</strong></p>';
        echo '<ul style="line-height: 2;">';
        echo '<li>Dependências: ' . ($allDepsOk ? '✅ OK' : '❌ FALTANDO') . '</li>';
        echo '<li>SDK Mercado Pago: ' . (class_exists('MercadoPago\\MercadoPagoConfig') ? '✅ OK' : '❌ NÃO DISPONÍVEL') . '</li>';
        echo '<li>Configuração: ' . (defined('ACCESS_TOKEN') && !empty(ACCESS_TOKEN) ? '✅ OK' : '❌ PROBLEMA') . '</li>';
        echo '<li>Banco de Dados: ' . (isset($pdo) && $pdo instanceof PDO ? '✅ OK' : '❌ PROBLEMA') . '</li>';
        echo '</ul>';
        echo '</div>';
        ?>
        
        <div style="margin-top: 30px; padding: 20px; background: #f5f5f5; border-radius: 5px;">
            <h3>🔧 Próximos Passos</h3>
            <ol style="line-height: 2;">
                <li>Verifique os erros destacados em vermelho acima</li>
                <li>Corrija os arquivos faltando ou com problemas de sintaxe</li>
                <li>Verifique se o ACCESS_TOKEN está correto em <code>config/token.php</code></li>
                <li>Verifique se a conexão com o banco está funcionando em <code>config/config_db.php</code></li>
                <li>Execute este teste novamente após as correções</li>
            </ol>
        </div>
    </div>
</body>
</html>



