<?php
/**
 * DIAGNÓSTICO: Teste da API de Cartão de Crédito do Mercado Pago
 * Este arquivo testa a criação de um pagamento com cartão e mostra a resposta completa da API
 */

declare(strict_types=1);

// Configuração de logs
ini_set('display_errors', 1);
ini_set('log_errors', 1);
error_reporting(E_ALL);

// Headers para permitir acesso
header('Content-Type: text/html; charset=utf-8');

// Autoload do Composer
require __DIR__ . '/../vendor/autoload.php';

// Conexão com o banco de dados
require __DIR__ . '/../config/config_db.php';

// Importa o arquivo com o access token
require __DIR__ . '/../config/token.php';

// Imports do SDK v3.5+
use MercadoPago\Client\Payment\PaymentClient;
use MercadoPago\Client\Common\RequestOptions;
use MercadoPago\MercadoPagoConfig;
use MercadoPago\Exceptions\MPApiException;

?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Teste API Cartão - Mercado Pago</title>
    <style>
        body {
            font-family: 'Courier New', monospace;
            padding: 20px;
            background: #1e1e1e;
            color: #fff;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
        }
        h1 {
            color: #4CAF50;
            border-bottom: 2px solid #4CAF50;
            padding-bottom: 10px;
        }
        h2 {
            color: #2196F3;
            margin-top: 30px;
        }
        .section {
            background: #2d2d2d;
            padding: 20px;
            border-radius: 8px;
            margin: 20px 0;
            border-left: 4px solid #4CAF50;
        }
        .error {
            border-left-color: #f44336;
            background: #3d2d2d;
        }
        .warning {
            border-left-color: #ff9800;
            background: #3d3d2d;
        }
        pre {
            background: #1e1e1e;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
            border: 1px solid #444;
        }
        .success {
            color: #4CAF50;
        }
        .error-text {
            color: #f44336;
        }
        .info {
            color: #2196F3;
        }
        button {
            background: #4CAF50;
            color: white;
            border: none;
            padding: 15px 30px;
            font-size: 16px;
            border-radius: 5px;
            cursor: pointer;
            margin: 10px 5px;
        }
        button:hover {
            background: #45a049;
        }
        .test-result {
            margin-top: 20px;
            padding: 15px;
            border-radius: 5px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔍 Diagnóstico: API Cartão de Crédito Mercado Pago</h1>
        
        <?php
        // Configurar o token de acesso do Mercado Pago
        try {
            MercadoPagoConfig::setAccessToken(ACCESS_TOKEN);
            MercadoPagoConfig::setRuntimeEnviroment(MercadoPagoConfig::LOCAL);
            
            echo '<div class="section success">';
            echo '<h2>✅ Configuração</h2>';
            echo '<p>Token configurado com sucesso</p>';
            echo '<p><strong>Token (primeiros 10 caracteres):</strong> ' . substr(ACCESS_TOKEN, 0, 10) . '***</p>';
            echo '</div>';
        } catch (Exception $e) {
            echo '<div class="section error">';
            echo '<h2>❌ Erro na Configuração</h2>';
            echo '<p class="error-text">' . htmlspecialchars($e->getMessage()) . '</p>';
            echo '</div>';
            exit;
        }
        
        // Dados de teste - Estrutura mínima para cartão
        $testData = [
            'transaction_amount' => 100.00,
            'description' => 'Teste de Cartão - Diagnóstico',
            'payment_method_id' => 'visa',
            'token' => 'CARD_TOKEN_TEST', // Token de teste (será rejeitado, mas mostra a estrutura)
            'installments' => 1,
            'payer' => [
                'email' => 'test@example.com',
                'first_name' => 'Teste',
                'last_name' => 'Diagnóstico',
                'identification' => [
                    'type' => 'CPF',
                    'number' => '12345678909'
                ],
                'phone' => [
                    'area_code' => '11',
                    'number' => '987654321'
                ]
            ],
            'external_reference' => 'test_' . time(),
            'notification_url' => 'https://' . $_SERVER['HTTP_HOST'] . '/backend/webhook.php'
        ];
        
        echo '<div class="section">';
        echo '<h2>📦 Payload de Teste (Estrutura Mínima)</h2>';
        echo '<p class="warning">⚠️ Este é um payload mínimo. O token de cartão será inválido, mas mostra a estrutura esperada.</p>';
        echo '<pre>' . json_encode($testData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</pre>';
        echo '</div>';
        
        // Payload com endereço (para produtos físicos)
        $testDataComEndereco = $testData;
        $testDataComEndereco['additional_info'] = [
            'items' => [
                [
                    'id' => '1',
                    'title' => 'Teste de Cartão',
                    'quantity' => 1,
                    'unit_price' => 100.00
                ]
            ],
            'shipments' => [
                'receiver_address' => [
                    'zip_code' => '01310100',
                    'street_name' => 'Avenida Paulista',
                    'street_number' => '1000',
                    'city_name' => 'São Paulo',
                    'state_name' => 'SP'
                ]
            ]
        ];
        
        echo '<div class="section">';
        echo '<h2>📦 Payload de Teste (Com Endereço - Produto Físico)</h2>';
        echo '<pre>' . json_encode($testDataComEndereco, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</pre>';
        echo '</div>';
        
        // Tentar criar o pagamento
        echo '<div class="section">';
        echo '<h2>🚀 Testando Criação do Pagamento</h2>';
        echo '<p class="info">⚠️ Este teste usa um token de cartão inválido, então será rejeitado, mas mostrará a estrutura da resposta.</p>';
        
        try {
            $client = new PaymentClient();
            
            // Criar request options com idempotency key
            $requestOptions = new RequestOptions();
            $idempotencyKey = 'test_cartao_' . time();
            $requestOptions->setCustomHeaders(["X-Idempotency-Key: {$idempotencyKey}"]);
            
            echo '<p class="info">Enviando requisição para a API do Mercado Pago...</p>';
            
            // Criar pagamento (será rejeitado por token inválido, mas mostra a estrutura)
            $payment = $client->create($testDataComEndereco, $requestOptions);
            
            echo '<div class="test-result success" style="background: #2d4d2d; border: 1px solid #4CAF50;">';
            echo '<h3>✅ SUCESSO!</h3>';
            echo '<p><strong>Payment ID:</strong> ' . ($payment->id ?? 'N/A') . '</p>';
            echo '<p><strong>Status:</strong> ' . ($payment->status ?? 'N/A') . '</p>';
            echo '<h4>Resposta Completa:</h4>';
            echo '<pre>' . json_encode($payment, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</pre>';
            echo '</div>';
            
        } catch (MPApiException $e) {
            echo '<div class="test-result error" style="background: #4d2d2d; border: 1px solid #f44336;">';
            echo '<h3>❌ ERRO DA API</h3>';
            echo '<p><strong>Mensagem:</strong> <code>' . htmlspecialchars($e->getMessage()) . '</code></p>';
            echo '<p><strong>Status Code:</strong> <code>' . ($e->getStatusCode() ?? 'N/A') . '</code></p>';
            echo '<p><strong>Código:</strong> <code>' . ($e->getCode() ?? 'N/A') . '</code></p>';
            
            // Tentar extrair informações detalhadas - SDK v3 usa getApiResponse()->getContent()
            $apiResponse = null;
            
            if (method_exists($e, 'getApiResponse')) {
                try {
                    $mpResponse = $e->getApiResponse();
                    if (method_exists($mpResponse, 'getContent')) {
                        $apiResponse = $mpResponse->getContent();
                        echo '<h4>Resposta Completa (getApiResponse()->getContent()):</h4>';
                        echo '<pre>' . json_encode($apiResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</pre>';
                        
                        // Tentar extrair mensagens específicas
                        if (is_array($apiResponse)) {
                            if (isset($apiResponse['cause']) && is_array($apiResponse['cause'])) {
                                echo '<h4>Causas do Erro:</h4>';
                                echo '<ul>';
                                foreach ($apiResponse['cause'] as $cause) {
                                    if (isset($cause['description'])) {
                                        echo '<li><code>' . htmlspecialchars((string)$cause['description']) . '</code></li>';
                                    }
                                    if (isset($cause['code'])) {
                                        echo '<li><code>Código: ' . htmlspecialchars((string)$cause['code']) . '</code></li>';
                                    }
                                }
                                echo '</ul>';
                            }
                            
                            if (isset($apiResponse['errors']) && is_array($apiResponse['errors'])) {
                                echo '<h4>Erros de Validação:</h4>';
                                echo '<ul>';
                                foreach ($apiResponse['errors'] as $error) {
                                    if (isset($error['message'])) {
                                        echo '<li><code>' . htmlspecialchars((string)$error['message']) . '</code></li>';
                                    }
                                }
                                echo '</ul>';
                            }
                            
                            if (isset($apiResponse['message'])) {
                                echo '<h4>Mensagem Principal:</h4>';
                                echo '<p><code>' . htmlspecialchars((string)$apiResponse['message']) . '</code></p>';
                            }
                        }
                    }
                } catch (Exception $ex) {
                    echo '<p class="error-text">Erro ao obter conteúdo: ' . htmlspecialchars($ex->getMessage()) . '</p>';
                }
            }
            
            echo '</div>';
            
        } catch (Exception $e) {
            echo '<div class="test-result error" style="background: #4d2d2d; border: 1px solid #f44336;">';
            echo '<h3>❌ ERRO GERAL</h3>';
            echo '<p><strong>Mensagem:</strong> <code>' . htmlspecialchars($e->getMessage()) . '</code></p>';
            echo '<p><strong>Arquivo:</strong> <code>' . htmlspecialchars($e->getFile()) . '</code></p>';
            echo '<p><strong>Linha:</strong> <code>' . $e->getLine() . '</code></p>';
            echo '<h4>Stack Trace:</h4>';
            echo '<pre>' . htmlspecialchars($e->getTraceAsString()) . '</pre>';
            echo '</div>';
        }
        
        echo '</div>';
        
        // Informações adicionais
        echo '<div class="section">';
        echo '<h2>ℹ️ Informações do Ambiente</h2>';
        echo '<ul>';
        echo '<li><strong>PHP Version:</strong> ' . phpversion() . '</li>';
        echo '<li><strong>Servidor:</strong> ' . ($_SERVER['SERVER_SOFTWARE'] ?? 'N/A') . '</li>';
        echo '<li><strong>Host:</strong> ' . ($_SERVER['HTTP_HOST'] ?? 'N/A') . '</li>';
        echo '<li><strong>Data/Hora:</strong> ' . date('Y-m-d H:i:s') . '</li>';
        echo '</ul>';
        echo '</div>';
        ?>
        
        <div class="section">
            <h2>📝 Próximos Passos</h2>
            <ol>
                <li>Verifique a resposta completa da API acima</li>
                <li>Procure por mensagens de erro específicas (cause, errors, message)</li>
                <li>Compare o payload de teste com o payload real do sistema</li>
                <li>Verifique se o token está correto e ativo</li>
                <li>Verifique se a estrutura do payload está correta conforme documentação do Mercado Pago</li>
            </ol>
        </div>
    </div>
</body>
</html>

