<?php
/**
 * Mercado Pago OAuth Callback
 * Recebe o code do MP e troca por access_token
 */
error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/Payment/MercadoPagoOAuth.php';

use Payment\MercadoPagoOAuth;

session_start();

// Log para debug
$logFile = __DIR__ . '/../logs/mp-oauth.log';
$logData = date('Y-m-d H:i:s') . " - GET: " . json_encode($_GET) . " SESSION: " . json_encode($_SESSION) . "\n";
file_put_contents($logFile, $logData, FILE_APPEND);

$pdo = getDB();
$oauth = new MercadoPagoOAuth($pdo);

// Verificar se há erro (usuário cancelou)
if (isset($_GET['error'])) {
    header('Location: /pages/pagamentos.php?error=' . urlencode($_GET['error']));
    exit;
}

// Obter code e state
$code = $_GET['code'] ?? null;
$state = $_GET['state'] ?? null;

// Validar parâmetros
if (!$code || !$state) {
    // Debug: mostrar o que foi recebido
    $debug = "code=" . ($code ?? 'null') . ", state=" . ($state ?? 'null');
    file_put_contents($logFile, date('Y-m-d H:i:s') . " - INVALID PARAMS: $debug\n", FILE_APPEND);
    header('Location: /pages/pagamentos.php?error=invalid_params&debug=' . urlencode($debug));
    exit;
}

// Validar state (CSRF protection)
if (!$oauth->validateState($state)) {
    file_put_contents($logFile, date('Y-m-d H:i:s') . " - INVALID STATE\n", FILE_APPEND);
    header('Location: /pages/pagamentos.php?error=invalid_state');
    exit;
}

// Obter store_id da sessão
$storeId = $_SESSION['mp_oauth_store_id'] ?? null;
if (!$storeId) {
    file_put_contents($logFile, date('Y-m-d H:i:s') . " - NO STORE ID\n", FILE_APPEND);
    header('Location: /pages/pagamentos.php?error=no_store');
    exit;
}

// Trocar code por token
$tokenResult = $oauth->exchangeCodeForToken($code);
file_put_contents($logFile, date('Y-m-d H:i:s') . " - TOKEN RESULT: " . json_encode($tokenResult) . "\n", FILE_APPEND);

if (!$tokenResult['success']) {
    header('Location: /pages/pagamentos.php?error=' . urlencode($tokenResult['error'] ?? 'unknown'));
    exit;
}

// Salvar integração
$saved = $oauth->saveIntegration($storeId, $tokenResult);

if (!$saved) {
    header('Location: /pages/pagamentos.php?error=save_failed');
    exit;
}

// Limpar state da sessão
unset($_SESSION['mp_oauth_state']);
unset($_SESSION['mp_oauth_store_id']);

// Redirecionar com sucesso
header('Location: /pages/pagamentos.php?success=connected');
exit;
