<?php
/**
 * TESTE COMPLETO: Diagnóstico Detalhado de Pagamento com Cartão
 * Este arquivo captura TODOS os dados: token, payload, resposta 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';

// 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 Completo: Cartão de Crédito</title>
    <style>
        body {
            font-family: 'Courier New', monospace;
            padding: 20px;
            background: #1e1e1e;
            color: #fff;
            line-height: 1.6;
        }
        .container {
            max-width: 1600px;
            margin: 0 auto;
        }
        h1 {
            color: #f44336;
            border-bottom: 2px solid #f44336;
            padding-bottom: 10px;
        }
        h2 {
            color: #2196F3;
            margin-top: 30px;
            border-bottom: 1px solid #444;
            padding-bottom: 5px;
        }
        h3 {
            color: #ff9800;
            margin-top: 20px;
        }
        .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;
        }
        .info {
            border-left-color: #2196F3;
            background: #2d2d3d;
        }
        .success {
            border-left-color: #4CAF50;
            background: #2d4d2d;
        }
        pre {
            background: #1e1e1e;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
            border: 1px solid #444;
            font-size: 12px;
            line-height: 1.4;
            max-height: 500px;
            overflow-y: auto;
        }
        .error-text {
            color: #f44336;
            font-weight: bold;
        }
        .success-text {
            color: #4CAF50;
        }
        .info-text {
            color: #2196F3;
        }
        .warning-text {
            color: #ff9800;
        }
        code {
            background: #1e1e1e;
            padding: 2px 6px;
            border-radius: 3px;
            color: #4CAF50;
        }
        ul, ol {
            line-height: 1.8;
        }
        li {
            margin: 8px 0;
        }
        .form-group {
            margin: 15px 0;
        }
        label {
            display: block;
            margin-bottom: 5px;
            color: #fff;
            font-weight: bold;
        }
        input, select, textarea {
            width: 100%;
            padding: 10px;
            border: 1px solid #444;
            background: #1e1e1e;
            color: #fff;
            border-radius: 4px;
            font-family: 'Courier New', monospace;
            font-size: 14px;
        }
        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;
        }
        button.secondary {
            background: #2196F3;
        }
        button.secondary:hover {
            background: #1976D2;
        }
        .hidden {
            display: none;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔍 Teste Completo: Diagnóstico de Pagamento com Cartão</h1>
        
        <div class="section info">
            <h2>ℹ️ Instruções</h2>
            <ol>
                <li>Este arquivo captura TODOS os dados do pagamento: token, payload completo, e resposta da API</li>
                <li>Preencha os dados abaixo simulando um pagamento real</li>
                <li>O sistema irá mostrar EXATAMENTE o que está sendo enviado para a API do Mercado Pago</li>
                <li>Você verá a resposta completa da API, incluindo todos os erros detalhados</li>
            </ol>
        </div>

        <div class="section">
            <h2>📝 Formulário de Teste</h2>
            <form id="testForm" method="POST">
                <div class="form-group">
                    <label>Token do Cartão (gerado pelo SDK):</label>
                    <input type="text" id="token" name="token" placeholder="Ex: 1234567890123456" required>
                    <small style="color: #888;">Token gerado pelo SDK do Mercado Pago (getCardFormData().token)</small>
                </div>
                
                <div class="form-group">
                    <label>Payment Method ID:</label>
                    <select id="payment_method_id" name="payment_method_id" required>
                        <option value="">Selecione...</option>
                        <option value="visa">Visa</option>
                        <option value="master">Mastercard</option>
                        <option value="amex">American Express</option>
                        <option value="elo">Elo</option>
                    </select>
                    <small style="color: #888;">Tipo de cartão (getCardFormData().paymentMethodId)</small>
                </div>
                
                <div class="form-group">
                    <label>Issuer ID (opcional):</label>
                    <input type="text" id="issuer" name="issuer" placeholder="Ex: 123">
                    <small style="color: #888;">ID do banco emissor (getCardFormData().issuerId)</small>
                </div>
                
                <div class="form-group">
                    <label>Parcelas:</label>
                    <input type="number" id="installments" name="installments" value="1" min="1" max="12" required>
                </div>
                
                <div class="form-group">
                    <label>Valor da Transação:</label>
                    <input type="number" id="transaction_amount" name="transaction_amount" value="100.00" step="0.01" required>
                </div>
                
                <div class="form-group">
                    <label>Descrição:</label>
                    <input type="text" id="description" name="description" value="Teste Completo - Diagnóstico" required>
                </div>
                
                <div class="form-group">
                    <label>Email do Pagador:</label>
                    <input type="email" id="payer_email" name="payer_email" value="test@example.com" required>
                </div>
                
                <div class="form-group">
                    <label>Nome do Pagador:</label>
                    <input type="text" id="payer_first_name" name="payer_first_name" value="Teste" required>
                </div>
                
                <div class="form-group">
                    <label>Sobrenome do Pagador:</label>
                    <input type="text" id="payer_last_name" name="payer_last_name" value="Diagnóstico" required>
                </div>
                
                <div class="form-group">
                    <label>CPF do Pagador:</label>
                    <input type="text" id="payer_cpf" name="payer_cpf" value="12345678909" maxlength="11" required>
                </div>
                
                <div class="form-group">
                    <label>DDD (Área Code):</label>
                    <input type="text" id="payer_area_code" name="payer_area_code" value="11" maxlength="2" required>
                </div>
                
                <div class="form-group">
                    <label>Telefone:</label>
                    <input type="text" id="payer_phone" name="payer_phone" value="987654321" maxlength="9" required>
                </div>
                
                <h3>Endereço (Opcional - para produtos físicos)</h3>
                
                <div class="form-group">
                    <label>CEP:</label>
                    <input type="text" id="endereco_cep" name="endereco_cep" placeholder="01310100" maxlength="8">
                </div>
                
                <div class="form-group">
                    <label>Rua:</label>
                    <input type="text" id="endereco_rua" name="endereco_rua" placeholder="Avenida Paulista">
                </div>
                
                <div class="form-group">
                    <label>Número:</label>
                    <input type="text" id="endereco_numero" name="endereco_numero" placeholder="1000">
                </div>
                
                <div class="form-group">
                    <label>Cidade:</label>
                    <input type="text" id="endereco_cidade" name="endereco_cidade" placeholder="São Paulo">
                </div>
                
                <div class="form-group">
                    <label>Estado (UF):</label>
                    <input type="text" id="endereco_estado" name="endereco_estado" placeholder="SP" maxlength="2">
                </div>
                
                <button type="submit">🚀 Testar Pagamento</button>
                <button type="button" class="secondary" onclick="document.getElementById('testForm').reset()">Limpar Formulário</button>
            </form>
        </div>

        <?php
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            // 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 class="success-text">Token configurado com sucesso</p>';
                echo '<p><strong>Token (primeiros 10 caracteres):</strong> ' . substr(ACCESS_TOKEN, 0, 10) . '***</p>';
                echo '</div>';
                
                // Capturar dados do formulário
                $token = trim($_POST['token'] ?? '');
                $payment_method_id = trim($_POST['payment_method_id'] ?? '');
                $issuer = trim($_POST['issuer'] ?? '');
                $installments = intval($_POST['installments'] ?? 1);
                $transaction_amount = floatval($_POST['transaction_amount'] ?? 100.00);
                $description = trim($_POST['description'] ?? 'Teste');
                $payer_email = trim($_POST['payer_email'] ?? '');
                $payer_first_name = trim($_POST['payer_first_name'] ?? '');
                $payer_last_name = trim($_POST['payer_last_name'] ?? '');
                $payer_cpf = preg_replace('/\D/', '', $_POST['payer_cpf'] ?? '');
                $payer_area_code = preg_replace('/\D/', '', $_POST['payer_area_code'] ?? '11');
                $payer_phone = preg_replace('/\D/', '', $_POST['payer_phone'] ?? '');
                
                // Endereço (opcional)
                $endereco_cep = preg_replace('/\D/', '', $_POST['endereco_cep'] ?? '');
                $endereco_rua = trim($_POST['endereco_rua'] ?? '');
                $endereco_numero = trim($_POST['endereco_numero'] ?? '');
                $endereco_cidade = trim($_POST['endereco_cidade'] ?? '');
                $endereco_estado = strtoupper(trim($_POST['endereco_estado'] ?? ''));
                
                // Validar dados obrigatórios
                if (empty($token)) {
                    throw new Exception('Token do cartão é obrigatório');
                }
                if (empty($payment_method_id)) {
                    throw new Exception('Payment Method ID é obrigatório');
                }
                if (empty($payer_email)) {
                    throw new Exception('Email do pagador é obrigatório');
                }
                if (strlen($payer_cpf) !== 11) {
                    throw new Exception('CPF deve ter 11 dígitos');
                }
                
                // Montar payload básico
                $paymentData = [
                    'transaction_amount' => round($transaction_amount, 2),
                    'token' => $token,
                    'description' => $description,
                    'installments' => $installments,
                    'payment_method_id' => $payment_method_id,
                    'external_reference' => 'test_completo_' . time(),
                    'notification_url' => 'https://' . $_SERVER['HTTP_HOST'] . '/backend/webhook.php',
                    'payer' => [
                        'email' => $payer_email,
                        'first_name' => $payer_first_name,
                        'last_name' => $payer_last_name,
                        'identification' => [
                            'type' => 'CPF',
                            'number' => $payer_cpf
                        ],
                        'phone' => [
                            'area_code' => substr($payer_area_code, 0, 2),
                            'number' => substr($payer_phone, -9)
                        ]
                    ]
                ];
                
                // Adicionar issuer_id se fornecido
                if (!empty($issuer) && is_numeric($issuer)) {
                    $paymentData['issuer_id'] = (int)$issuer;
                }
                
                // Adicionar endereço se fornecido (para produtos físicos)
                if (!empty($endereco_cep) && !empty($endereco_rua) && !empty($endereco_numero) && 
                    !empty($endereco_cidade) && !empty($endereco_estado)) {
                    $paymentData['additional_info'] = [
                        'items' => [
                            [
                                'id' => '1',
                                'title' => $description,
                                'quantity' => 1,
                                'unit_price' => round($transaction_amount, 2)
                            ]
                        ],
                        'shipments' => [
                            'receiver_address' => [
                                'zip_code' => $endereco_cep,
                                'street_name' => $endereco_rua,
                                'street_number' => $endereco_numero,
                                'city_name' => $endereco_cidade,
                                'state_name' => $endereco_estado
                            ]
                        ]
                    ];
                }
                
                // Mostrar payload completo
                echo '<div class="section info">';
                echo '<h2>📦 Payload Completo que será enviado à API</h2>';
                echo '<pre>' . json_encode($paymentData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</pre>';
                echo '</div>';
                
                // Tentar criar o pagamento
                echo '<div class="section warning">';
                echo '<h2>🚀 Testando Criação do Pagamento</h2>';
                echo '<p class="info-text">Enviando requisição para a API do Mercado Pago...</p>';
                
                try {
                    $client = new PaymentClient();
                    $requestOptions = new RequestOptions();
                    $idempotencyKey = 'test_completo_' . time();
                    $requestOptions->setCustomHeaders(["X-Idempotency-Key: {$idempotencyKey}"]);
                    
                    $payment = $client->create($paymentData, $requestOptions);
                    
                    echo '<div class="section success">';
                    echo '<h3 class="success-text">✅ 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="section error">';
                    echo '<h3 class="error-text">❌ 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>';
                    
                    $apiResponse = null;
                    if (method_exists($e, 'getApiResponse')) {
                        try {
                            $mpResponse = $e->getApiResponse();
                            if (method_exists($mpResponse, 'getContent')) {
                                $apiResponse = $mpResponse->getContent();
                                echo '<h3>Resposta Completa da API (getApiResponse()->getContent()):</h3>';
                                echo '<pre>' . json_encode($apiResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</pre>';
                                
                                // Analisar erro detalhadamente
                                if (is_array($apiResponse)) {
                                    if (isset($apiResponse['cause']) && is_array($apiResponse['cause'])) {
                                        echo '<h3>Causas do Erro:</h3>';
                                        echo '<ul>';
                                        foreach ($apiResponse['cause'] as $cause) {
                                            if (isset($cause['code'])) {
                                                echo '<li><strong>Código:</strong> <code>' . htmlspecialchars((string)$cause['code']) . '</code></li>';
                                            }
                                            if (isset($cause['description'])) {
                                                echo '<li><strong>Descrição:</strong> ' . htmlspecialchars($cause['description']) . '</li>';
                                            }
                                            if (isset($cause['data'])) {
                                                echo '<li><strong>Data:</strong> <code>' . htmlspecialchars($cause['data']) . '</code></li>';
                                            }
                                        }
                                        echo '</ul>';
                                    }
                                    
                                    if (isset($apiResponse['message'])) {
                                        echo '<h3>Mensagem Principal:</h3>';
                                        echo '<p class="error-text"><code>' . htmlspecialchars($apiResponse['message']) . '</code></p>';
                                    }
                                    
                                    if (isset($apiResponse['errors']) && is_array($apiResponse['errors'])) {
                                        echo '<h3>Erros de Validação:</h3>';
                                        echo '<ul>';
                                        foreach ($apiResponse['errors'] as $error) {
                                            if (isset($error['message'])) {
                                                echo '<li><code>' . htmlspecialchars($error['message']) . '</code></li>';
                                            }
                                        }
                                        echo '</ul>';
                                    }
                                }
                            }
                        } catch (Exception $ex) {
                            echo '<p class="error-text">Erro ao obter conteúdo: ' . htmlspecialchars($ex->getMessage()) . '</p>';
                        }
                    }
                    
                    echo '</div>';
                    
                    // Análise do erro
                    echo '<div class="section warning">';
                    echo '<h2>💡 Análise do Erro</h2>';
                    $errorMessage = $e->getMessage();
                    if (stripos($errorMessage, 'inference') !== false) {
                        echo '<p class="warning-text"><strong>Erro "payment methods inference error" detectado!</strong></p>';
                        echo '<p>Este erro geralmente indica:</p>';
                        echo '<ul>';
                        echo '<li>O token não contém informações suficientes sobre o método de pagamento</li>';
                        echo '<li>O payment_method_id não corresponde ao tipo de cartão no token</li>';
                        echo '<li>O token foi gerado incorretamente pelo SDK do Mercado Pago</li>';
                        echo '<li>Há inconsistência entre o token e o payment_method_id</li>';
                        echo '</ul>';
                        echo '<p><strong>Possíveis soluções:</strong></p>';
                        echo '<ol>';
                        echo '<li>Verificar se o token está sendo gerado corretamente no frontend</li>';
                        echo '<li>Verificar se o payment_method_id corresponde ao tipo de cartão</li>';
                        echo '<li>Verificar se o SDK do Mercado Pago está atualizado</li>';
                        echo '<li>Verificar se os dados do cartão estão sendo capturados corretamente</li>';
                        echo '</ol>';
                    }
                    echo '</div>';
                    
                } catch (Exception $e) {
                    echo '<div class="section error">';
                    echo '<h3 class="error-text">❌ 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>';
                
            } 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>';
            }
        }
        ?>
        
        <div class="section info">
            <h2>🔍 Informações Adicionais</h2>
            <ul>
                <li><strong>PHP Version:</strong> <?php echo phpversion(); ?></li>
                <li><strong>Servidor:</strong> <?php echo $_SERVER['SERVER_SOFTWARE'] ?? 'N/A'; ?></li>
                <li><strong>Host:</strong> <?php echo $_SERVER['HTTP_HOST'] ?? 'N/A'; ?></li>
                <li><strong>Data/Hora:</strong> <?php echo date('Y-m-d H:i:s'); ?></li>
                <li><strong>Token MP (primeiros 10 chars):</strong> <?php echo substr(ACCESS_TOKEN, 0, 10) . '***'; ?></li>
            </ul>
        </div>
    </div>
</body>
</html>

