<?php
declare(strict_types=1);

/**
 * Reenvia ao CRM um lead que falhou na captura. Só faz sentido para
 * send_status = 'failed'; leads já aceitos são ignorados para não duplicar.
 */

require __DIR__ . '/auth.php';
admin_require_login();

$back = 'index.php';
if (isset($_POST['return']) && is_string($_POST['return']) && str_starts_with($_POST['return'], 'index.php')) {
    $back = $_POST['return'];
}

function redirect_back(string $back, string $status, string $msg): never
{
    $sep = str_contains($back, '?') ? '&' : '?';
    header('Location: ' . $back . $sep . http_build_query(['resend' => $status, 'msg' => $msg]), true, 303);
    exit;
}

if (($_SERVER['REQUEST_METHOD'] ?? 'GET') !== 'POST' || !admin_csrf_check($_POST['_csrf'] ?? null)) {
    redirect_back($back, 'error', 'Requisição inválida.');
}

$id = (int) ($_POST['id'] ?? 0);
$lead = $id > 0 ? store_get_lead($id) : null;

if ($lead === null) {
    redirect_back($back, 'error', 'Lead não encontrado.');
}
if (in_array($lead['send_status'] ?? '', ['ok', 'duplicate'], true)) {
    redirect_back($back, 'error', 'Esse lead já está no CRM — reenviar só criaria duplicidade.');
}

$result = partner_register_lead([
    'first_name' => (string) $lead['first_name'],
    'last_name' => (string) $lead['last_name'],
    'phone' => (string) $lead['phone'],
    'email' => (string) $lead['email'],
    'source' => (string) ($lead['source'] ?: PARTNER_SOURCE),
    'ip' => (string) ($lead['ip'] ?: '0.0.0.0'),
    'country' => (string) ($lead['country'] ?: PARTNER_DEFAULT_COUNTRY),
    'funnel_name' => (string) ($lead['funnel_name'] ?: PARTNER_FUNNEL_NAME),
]);

store_update_send_result($id, $result);

redirect_back(
    $back,
    $result['ok'] ? 'ok' : 'error',
    $result['ok']
        ? 'Lead reenviado com sucesso.'
        : 'Reenvio falhou: ' . ($result['error'] ?? 'erro desconhecido')
);
