<?php
require __DIR__ . '/../config.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') json_out(['success' => false, 'error' => 'Método inválido'], 405);

$in = json_decode(file_get_contents('php://input'), true);
if (!is_array($in)) json_out(['success' => false, 'error' => 'Dados inválidos'], 400);

$get = function ($k) use ($in) { return isset($in[$k]) ? trim((string)$in[$k]) : ''; };

$name  = $get('customer_name');
$email = $get('customer_email');
$doc   = only_digits($get('customer_document'));
$phone = only_digits($get('customer_phone'));

if (mb_strlen($name) < 2)                          json_out(['success' => false, 'error' => 'Informe seu nome completo.'], 400);
if (!filter_var($email, FILTER_VALIDATE_EMAIL))    json_out(['success' => false, 'error' => 'Informe um e-mail válido.'], 400);
if (strlen($doc) !== 11)                           json_out(['success' => false, 'error' => 'Informe um CPF válido.'], 400);
if (strlen($phone) < 10)                           json_out(['success' => false, 'error' => 'Informe um telefone válido.'], 400);

// Valor e título do kit agora vêm do próprio HTML (checkout.js), e não mais
// de uma tabela fixa no backend. O backend só faz uma checagem mínima de
// sanidade (número positivo, dentro de uma faixa razoável).
$kitId    = $get('kit');
$kitTitle = $get('kit_title');
if ($kitTitle === '') $kitTitle = 'Kit Gummy Hair';

$amountRaw = $get('amount'); // esperado em centavos, ex.: 5490 = R$ 54,90
$amount    = (int) round((float) str_replace(',', '.', $amountRaw));

if ($amount < 100 || $amount > 100000) { // entre R$1,00 e R$1.000,00
  json_out(['success' => false, 'error' => 'Valor do pedido inválido.'], 400);
}

// Frete escolhido no checkout (em centavos) — usado no gateway e na Utmify
$shipCents = (int) round((float) str_replace(',', '.', $get('shipping_fee')));
if ($shipCents < 0 || $shipCents >= $amount) $shipCents = 0;
$shipLabel = $get('shipping_label');
if ($shipLabel === '') $shipLabel = 'Frete Grátis';

// Order bump (kit extra oferecido na etapa de pagamento) — em centavos
$bumpOn    = $get('order_bump') === '1';
$bumpCents = $bumpOn ? (int) round((float) str_replace(',', '.', $get('order_bump_amount'))) : 0;
if ($bumpCents < 0 || ($shipCents + $bumpCents) >= $amount) $bumpCents = 0;
$bumpTitle = $get('order_bump_title');
if ($bumpTitle === '') $bumpTitle = 'Mais um Kit 5 Body Splash';

$payload = [
  'amount'         => $amount,
  'payment_method' => 'pix',
  'customer' => [
    'name'     => $name,
    'email'    => $email,
    'document' => ['number' => $doc, 'type' => 'cpf'],
    'phone'    => $phone,
  ],
  // Observação: a Utmify aparentemente lê o "valor de venda" da integração
  // nativa da própria Vennox (o que mandamos aqui embaixo), e não soma o
  // "shipping.fee" a esse valor — só o item que fica de fora. Por isso o
  // item leva o valor CHEIO (kit + frete + bump) e o "shipping.fee" vai
  // zerado: assim o frete conta como receita em vez de ficar de fora.
  // Mantemos tudo num item só (em vez de separar kit/bump) porque o kit
  // tem price:0.00 no config.js — um item "tangible" de R$0,00 isolado
  // no array fazia a Vennox recusar a transação.
  'items' => [
    [
      'title'        => $bumpCents > 0 ? ($kitTitle . ' + ' . $bumpTitle) : $kitTitle,
      'unit_price'   => max(1, $amount),
      'quantity'     => 1,
      'tangible'     => true,
      'external_ref' => 'kit-' . $kitId,
    ],
  ],
  'shipping' => [
    'fee' => 0,
    'address' => [
      'street'        => $get('customer_address'),
      'street_number' => 'S/N',
      'complement'    => '',
      'zip_code'      => only_digits($get('customer_postal_code')),
      'neighborhood'  => $get('customer_neighborhood'),
      'city'          => $get('customer_city'),
      'state'         => $get('customer_state'),
      'country'       => 'BR',
    ],
  ],
  'pix'          => ['expires_in_days' => 1],
  'installments' => 1,
  'metadata'     => ['kit' => $kitId],
];

list($status, $json, $raw) = vennox_request('/v1/payment-transaction/create', 'POST', $payload);

if ($status < 200 || $status >= 300) {
  error_log('Vennox create falhou [' . $status . ']: ' . $raw);
  $msg = isset($json['message']) ? $json['message'] : 'Erro no gateway de pagamento (' . $status . ')';
  json_out(['success' => false, 'error' => $msg], 400);
}

$created = vennox_unwrap($json);
$pix = isset($created['pix']) ? $created['pix'] : [];
if (is_array($pix) && isset($pix[0])) $pix = $pix[0];

$copy = '';
if (!empty($pix['qr_code'])) $copy = $pix['qr_code'];
elseif (!empty($pix['url'])) $copy = $pix['url'];

if ($copy === '') {
  error_log('Vennox não retornou o código Pix: ' . $raw);
  json_out(['success' => false, 'error' => 'O gateway não retornou o código Pix.'], 400);
}

// Imagem do QR Code gerada a partir do código copia e cola
$qrImage = 'https://api.qrserver.com/v1/create-qr-code/?size=320x320&margin=0&data=' . urlencode($copy);

// ---------- UTMIFY: registra a venda como PENDENTE ----------
$txId = isset($created['id']) ? (string)$created['id'] : '';
if ($txId !== '') {
  $tracking = isset($in['tracking_parameters']) && is_array($in['tracking_parameters'])
    ? $in['tracking_parameters'] : [];
  utmify_save_order($txId, [
    'id'             => $txId,
    'name'           => $name,
    'email'          => $email,
    'phone'          => $phone,
    'document'       => $doc,
    'amount_cents'   => $amount,
    'shipping_cents' => $shipCents,
    'shipping_label' => $shipLabel,
    'bump_cents'     => $bumpCents,
    'bump_title'     => $bumpTitle,
    'kit'            => $kitId,
    'kit_title'      => $kitTitle,
    'address'        => $get('customer_address'),
    'neighborhood'   => $get('customer_neighborhood'),
    'city'           => $get('customer_city'),
    'state'          => $get('customer_state'),
    'zip'            => only_digits($get('customer_postal_code')),
    'tracking'       => $tracking,
    'ip'             => isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '',
    'user_agent'     => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '',
    'created_at'     => gmdate('c'),
    'sent'           => [],
  ]);
  utmify_notify($txId, 'pending');
}


json_out([
  'success'           => true,
  'transaction_id'    => isset($created['id']) ? $created['id'] : '',
  'amount'            => $amount / 100,
  'pix_copy_paste'    => $copy,
  'pix_qrcode_image'  => $qrImage,
  // Janela de urgência exibida no checkout (o Pix em si vale 24h)
  'expires_at'        => gmdate('c', time() + 15 * 60),
]);