<?php
// =====================================================
// pagar.php
// =====================================================
require_once __DIR__ . '/config.php';

// Log embutido — sem dependência de debug_log.php
function log_debug(string $ctx, $dados): void {
    $f = __DIR__ . '/pagamento_debug.log';
    $l = '[' . date('Y-m-d H:i:s') . '] [' . $ctx . '] ' . json_encode($dados, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n---\n";
    @file_put_contents($f, $l, FILE_APPEND | LOCK_EX);
}

header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }
if ($_SERVER['REQUEST_METHOD'] !== 'POST')    { http_response_code(405); echo json_encode(['erro'=>'Método não permitido.']); exit; }

$body  = file_get_contents('php://input');
$dados = json_decode($body, true);

log_debug('PAGAR - ENTRADA', [
    'raw_body'   => $body,
    'parsed'     => $dados,
    'ip'         => $_SERVER['REMOTE_ADDR'] ?? 'desconhecido',
    'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
]);

if (!$dados) {
    log_debug('PAGAR - ERRO', ['motivo' => 'JSON inválido ou body vazio', 'body' => $body]);
    http_response_code(400); echo json_encode(['erro'=>'Dados inválidos.']); exit;
}

$nome     = trim($dados['nome']  ?? '');
$email    = trim($dados['email'] ?? '');
$cpf      = preg_replace('/\D/', '', $dados['cpf'] ?? '');
$telefone = '11999999999';

$erros = [];
if (empty($nome))                               $erros[] = 'Nome é obrigatório.';
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $erros[] = 'E-mail inválido.';
if (strlen($cpf) !== 11)                        $erros[] = 'CPF inválido.';

if (!empty($erros)) {
    log_debug('PAGAR - VALIDAÇÃO FALHOU', ['erros' => $erros, 'dados_recebidos' => ['nome'=>$nome,'email'=>$email,'cpf_len'=>strlen($cpf)]]);
    http_response_code(422); echo json_encode(['erro'=>implode(' ',$erros)]); exit;
}

$externalCode = 'ESPCEX-' . strtoupper(substr(md5($email . time()), 0, 12));

$payload = [
    'store_code'      => MANGOFY_STORE_CODE,
    'payment_method'  => 'pix',
    'payment_format'  => 'regular',
    'external_code'   => $externalCode,
    'installments'    => 1,
    'postback_url'    => 'https://seusite.com.br/postback.php',
    'payment_amount'  => TAXA_VALOR,
    'shipping_amount' => 0,
    'items'           => [[
        'name'     => TAXA_DESCRICAO,
        'quantity' => 1,
        'amount'   => TAXA_VALOR,
    ]],
    'customer' => [
        'name'     => $nome,
        'email'    => $email,
        'document' => $cpf,
        'phone'    => $telefone,
        'ip'       => $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0',
    ],
    'pix' => ['expires_in_days' => 1],
];

log_debug('PAGAR - PAYLOAD ENVIADO PARA MANGOFY', $payload);

$ch = curl_init(MANGOFY_API_URL);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_HTTPHEADER     => [
        'Authorization: ' . MANGOFY_API_KEY,
        'Store-Code: '    . MANGOFY_STORE_CODE,
        'Content-Type: application/json',
        'Accept: application/json',
    ],
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_SSL_VERIFYPEER => true,
]);

$resposta   = curl_exec($ch);
$httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlErro   = curl_error($ch);
$curlInfo   = curl_getinfo($ch);
curl_close($ch);

log_debug('PAGAR - RESPOSTA MANGOFY', [
    'http_status'    => $httpStatus,
    'curl_erro'      => $curlErro ?: null,
    'tempo_total_s'  => $curlInfo['total_time'] ?? null,
    'resposta_raw'   => $resposta,
    'resposta_parse' => json_decode($resposta, true),
]);

if ($curlErro) {
    http_response_code(502); echo json_encode(['erro'=>'Falha ao conectar com o gateway. cURL: ' . $curlErro]); exit;
}

$r = json_decode($resposta, true);
if (isset($r['data'])) $r = $r['data'];

if ($httpStatus >= 400) {
    log_debug('PAGAR - GATEWAY RETORNOU ERRO', ['status' => $httpStatus, 'body' => $r]);
    http_response_code(502);
    echo json_encode(['erro' => $r['message'] ?? $r['error'] ?? 'Erro no gateway (HTTP ' . $httpStatus . ').']);
    exit;
}

$pixBlock = $r['pix'] ?? $r;

$qrCodeBase64 = $pixBlock['qr_code_base64'] ?? $pixBlock['base64']    ?? $pixBlock['image']      ?? null;
$qrCodeUrl    = $pixBlock['qr_code_url']    ?? $pixBlock['url']        ?? $pixBlock['qrcode_url'] ?? null;
$copiaCola    = $pixBlock['pix_qrcode_text'] ?? $pixBlock['qr_code']  ?? $pixBlock['copy_paste']
              ?? $pixBlock['copia_e_cola']   ?? $pixBlock['pix_code'] ?? $pixBlock['emv']
              ?? $pixBlock['payload']        ?? null;

if (!$copiaCola) {
    array_walk_recursive($r, function($v, $k) use (&$copiaCola) {
        if (!$copiaCola && is_string($v) && strlen($v) > 50 && strpos($v, '000201') === 0) {
            $copiaCola = $v;
        }
    });
}

$saida = [
    'sucesso'        => true,
    'payment_code'   => $r['payment_code']   ?? null,
    'status'         => $r['payment_status'] ?? 'pending',
    'valor'          => $r['payment_amount'] ?? TAXA_VALOR,
    'pix_copia_cola' => $copiaCola,
    'pix_qrcode_b64' => $qrCodeBase64,
    'pix_qrcode_url' => $qrCodeUrl,
];

log_debug('PAGAR - RESPOSTA ENVIADA AO FRONT', $saida);

echo json_encode($saida);