<?php
// ===========================================================================
// Pagina central de contratacion (paso 1: resumen del plan + datos del
// producto) y montaje del Embedded Checkout de Stripe (paso 2). Branded para
// sentirse como extension de cada landing (Bootstrap 5.3 + Poppins/Roboto +
// paleta del producto). Sin BD: delega todo a la API del producto.
// ===========================================================================

require_once __DIR__ . '/bootstrap.php';
require_once __DIR__ . '/src/vista.php';

// Página dinámica: evita que el navegador sirva HTML/JS cacheado (viejo).
header('Cache-Control: no-store, max-age=0');

$productoClave = isset($_GET['producto']) ? preg_replace('/[^a-z0-9_]/', '', strtolower($_GET['producto'])) : '';
$planClave     = isset($_GET['plan']) ? preg_replace('/[^a-z0-9_]/', '', strtolower($_GET['plan'])) : '';
$periodo       = isset($_GET['periodo']) ? preg_replace('/[^a-z]/', '', strtolower($_GET['periodo'])) : 'mensual';
$cantidad      = isset($_GET['cantidad']) ? max(1, intval($_GET['cantidad'])) : 1;
if (isset($_GET['usuarios'])) {
    $cantidad = max(1, min(100000, intval($_GET['usuarios'])));
}

$prod = getProducto($productoClave);

// Errores tempranos: producto desconocido.
if (!$prod) {
    http_response_code(404);
    $color = '#061c6b';
    $titulo = 'Producto no disponible';
    $mensaje = 'El producto solicitado no existe o no esta disponible para contratacion.';
    include __DIR__ . '/_error.php';
    exit;
}

$esUsuario = esquemaUsuario($prod);
$tarifa = null;
$cot = null;
if ($esUsuario) {
    // Esquema por usuario: la tarifa sale del tarifa.json publico de la landing.
    $tarifa = tarifaUsuario($productoClave);
    if (!$tarifa || $prod['stripe_producto'] == '') {
        http_response_code(503);
        $color = $prod['color'];
        $titulo = 'Contratación no disponible';
        $mensaje = 'La contratación de este producto aún no está disponible. Escríbenos a soporte@alkes.mx y lo resolvemos.';
        include __DIR__ . '/_error.php';
        exit;
    }
    if ($periodo != 'mensual' && $periodo != 'anual') {
        $periodo = 'mensual';
    }
    $planClave = 'usuario';
    $cot = cotizacionUsuario($tarifa, $cantidad, $periodo);
    $plan = array(
        'nombre' => $prod['nombre'] . ' por usuario',
        'precio' => $cot['total'],
        'periodo' => $periodo,
        'caracteristicas' => array(
            array('titulo' => 'Pagas por usuario con cuenta activa', 'descripcion' => 'Todos tus usuarios pagan el mismo precio.'),
            array('titulo' => 'Cada usuario adicional baja el precio de todos', 'descripcion' => ''),
            array('titulo' => 'Soporte y actualizaciones incluidos', 'descripcion' => ''),
            array('titulo' => 'Cambias tu número de usuarios desde la app', 'descripcion' => 'El cobro se ajusta con cada cambio.'),
        ),
    );
    $catalogo = true;
} else {
    $catalogo = catalogoPlanes($productoClave);
}

if (!$catalogo) {
    http_response_code(503);
    $color = $prod['color'];
    $titulo = 'No se pudo cargar el catálogo';
    $mensaje = 'No pudimos leer los planes del producto en este momento. Inténtalo de nuevo en unos minutos.';
    include __DIR__ . '/_error.php';
    exit;
}

if (!$esUsuario) {
    $plan = buscarPlan($catalogo, $planClave, $periodo);

    // Normaliza periodo cuando el plan es de pago unico (vitalicio).
    if ($plan && $plan['periodo'] == 'unico') {
        $periodo = 'unico';
    }
}

if (!$plan) {
    http_response_code(404);
    $color = $prod['color'];
    $titulo = 'Plan no disponible';
    $mensaje = 'El plan seleccionado no existe en el catálogo. Vuelve a la página de planes e intenta de nuevo.';
    include __DIR__ . '/_error.php';
    exit;
}

// Descriptor de campos (lo define el producto). Fallback minimo si la API no responde.
$camposResp = camposProducto($productoClave);
$campos = ($camposResp && !empty($camposResp['campos'])) ? $camposResp['campos'] : array(
    array('name' => 'empresa',  'label' => 'Nombre de la empresa', 'tipo' => 'text',     'required' => true, 'max' => 255),
    array('name' => 'nombre',   'label' => 'Tu nombre',            'tipo' => 'text',     'required' => true, 'max' => 150),
    array('name' => 'correo',   'label' => 'Correo electrónico',   'tipo' => 'email',    'required' => true),
    array('name' => 'password', 'label' => 'Contraseña',           'tipo' => 'password', 'required' => true, 'min' => 8, 'help' => 'Mínimo 8 caracteres.'),
);
$cantidadCfg = ($camposResp && isset($camposResp['cantidad'])) ? $camposResp['cantidad'] : null;

$color = $prod['color'];
$nombreProd = $prod['nombre'];
$pk = env('STRIPE_PUBLISHABLE_KEY', '');
$periodoTxt = $periodo == 'anual' ? 'MXN / año' : ($periodo == 'unico' ? 'MXN / pago único' : 'MXN / mes');



function inputCampo($c)
{
    $name = h($c['name']);
    $id = 'f-' . $name;
    $tipo = isset($c['tipo']) ? $c['tipo'] : 'text';
    $req = !empty($c['required']) ? ' required' : '';
    $attrs = '';
    if (isset($c['min'])) {
        $attrs .= ($tipo == 'number') ? ' min="' . intval($c['min']) . '"' : ' minlength="' . intval($c['min']) . '"';
    }
    if (isset($c['max'])) {
        $attrs .= ($tipo == 'number') ? ' max="' . intval($c['max']) . '"' : ' maxlength="' . intval($c['max']) . '"';
    }
    if (!empty($c['placeholder'])) {
        $attrs .= ' placeholder="' . h($c['placeholder']) . '"';
    }
    $html = '<div class="campo"><label for="' . $id . '">' . h($c['label']) . '</label>';
    if ($tipo == 'select' && !empty($c['opciones'])) {
        $html .= '<select id="' . $id . '" name="' . $name . '" class="sel"' . $req . '>';
        foreach ($c['opciones'] as $op) {
            $html .= '<option value="' . h(is_array($op) ? $op['valor'] : $op) . '">' . h(is_array($op) ? $op['texto'] : $op) . '</option>';
        }
        $html .= '</select>';
    } else {
        $html .= '<input id="' . $id . '" type="' . h($tipo) . '" name="' . $name . '" class="inp"' . $req . $attrs . '>';
    }
    if (!empty($c['help'])) {
        $html .= '<small>' . h($c['help']) . '</small>';
    }
    return $html . '</div>';
}

function pct($d)
{
    return rtrim(rtrim(number_format($d * 100, 1, '.', ''), '0'), '.');
}
?>
<!DOCTYPE html>
<html lang="es">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="robots" content="noindex,nofollow">
    <meta name="color-scheme" content="light dark">
    <title>Contratar <?php echo h($nombreProd); ?> | Alkes</title>
    <link rel="icon" href="assets/img/favicon.ico">
    <link rel="preload" href="assets/fonts/lexend-latin.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="stylesheet" href="assets/css/checkout.css?v=3">
    <script src="https://js.stripe.com/v3/"></script>
</head>

<body>
    <?php vistaEncabezado($prod, $productoClave); ?>

    <main class="pag">
        <div class="pag__h">
            <div class="eyebrow">Contratación</div>
            <h1>Contrata <?php echo h($nombreProd); ?></h1>
            <p>Arma tu plan, crea tu cuenta y paga. Tu cuenta se activa en cuanto se confirma el pago.</p>
        </div>

        <ol class="pasos" id="stepper" aria-label="Pasos">
            <li class="activo" data-step="1">1. Plan</li>
            <li data-step="2">2. Cuenta</li>
            <li data-step="3">3. Pago</li>
            <li data-step="4">4. Listo</li>
        </ol>

        <div class="cols">
            <div class="izq">
                <!-- Paso 1: Plan -->
                <section id="step-1" class="card">
                    <h2>Arma tu plan</h2>
                    <p class="card__sub">Elige cuántos usuarios necesitas. Puedes cambiarlo después desde la app.</p>

                    <?php if ($esUsuario) { ?>
                        <div class="campo">
                            <label for="cantidad">¿Cuántos usuarios tendrás?</label>
                            <div class="cantidad">
                                <button type="button" class="mas" id="menos" aria-label="Quitar un usuario">−</button>
                                <input type="number" id="cantidad" class="inp" min="1" max="100000" inputmode="numeric" value="<?php echo $cantidad; ?>">
                                <button type="button" class="mas" id="mas" aria-label="Agregar un usuario">+</button>
                            </div>
                        </div>
                        <div class="campo">
                            <label id="lbl-periodo">Periodo de pago</label>
                            <div class="seg" role="group" aria-labelledby="lbl-periodo">
                                <button type="button" data-per="mensual" aria-pressed="<?php echo $periodo == 'mensual' ? 'true' : 'false'; ?>">Mensual</button>
                                <button type="button" data-per="anual" aria-pressed="<?php echo $periodo == 'anual' ? 'true' : 'false'; ?>">Anual<small>Pagas <?php echo $cot['meses_pagados']; ?> meses, <?php echo $cot['meses_gratis']; ?> son gratis</small></button>
                            </div>
                        </div>
                        <div class="medidor" aria-live="polite">
                            <div id="med-txt"></div>
                            <div class="medidor__b"><i id="med-bar"></i></div>
                            <small>Cada usuario adicional baja <?php echo pct($tarifa['paso']); ?>% el precio de todos, hasta <?php echo intval(round($tarifa['tope_descuento'] * 100)); ?>% de descuento arriba de <?php echo usuariosTopeDescuento($tarifa) - 1; ?> usuarios.</small>
                        </div>
                    <?php } elseif ($cantidadCfg) { ?>
                        <div class="campo">
                            <label for="cantidad"><?php echo h($cantidadCfg['label']); ?></label>
                            <input type="number" id="cantidad" class="inp" min="<?php echo intval($cantidadCfg['min']); ?>" value="<?php echo $cantidad; ?>">
                            <small>El total se calcula por dispositivo. El prorrateo se ajusta luego desde el panel.</small>
                        </div>
                    <?php } else { ?>
                        <input type="hidden" id="cantidad" value="1">
                    <?php } ?>

                    <ul class="lista">
                        <?php foreach ($plan['caracteristicas'] as $c) { ?>
                            <li><?php echo icono('check-circle'); ?>
                                <div><?php echo h($c['titulo']); ?>
                                    <?php if (!empty($c['descripcion'])) { ?><small><?php echo h($c['descripcion']); ?></small><?php } ?>
                                </div>
                            </li>
                        <?php } ?>
                    </ul>
                    <button type="button" id="btn-siguiente-1" class="btn btn--p btn--w">Continuar <?php echo icono('arrow-right'); ?></button>
                </section>

                <!-- Paso 2: Cuenta -->
                <section id="step-2" class="card d-none">
                    <h2>Crea tu cuenta de administrador</h2>
                    <p class="card__sub">Con estos datos entrarás a <?php echo h($nombreProd); ?>.</p>
                    <div id="form-errores" class="alerta d-none" role="alert"></div>
                    <form id="form-datos" autocomplete="off" novalidate>
                        <?php foreach ($campos as $c) {
                            echo inputCampo($c);
                        } ?>
                        <p class="nota" style="margin:0 0 18px">¿Tienes un código promocional? Podrás aplicarlo en el paso de pago.</p>
                        <div class="acciones">
                            <button type="button" id="btn-atras-2" class="btn btn--s"><?php echo icono('arrow-right'); ?>Atrás</button>
                            <button type="submit" id="btn-siguiente-2" class="btn btn--p">Ir al pago <?php echo icono('arrow-right'); ?></button>
                        </div>
                    </form>
                </section>

                <!-- Paso 3: Pago -->
                <section id="step-3" class="card d-none">
                    <button type="button" id="btn-atras-3" class="volver"><?php echo icono('arrow-right'); ?>Cambiar mis datos</button>
                    <div id="checkout"><div class="cargando"><div class="giro" role="status"></div>Cargando pago seguro…</div></div>
                </section>

                <!-- Paso 4: Confirmación -->
                <section id="step-4" class="card d-none">
                    <div class="centro" id="confirmacion" aria-live="polite">
                        <div class="giro" role="status"></div>
                        <h2>Verificando tu pago…</h2>
                        <p>Un momento, por favor.</p>
                    </div>
                </section>
            </div>

            <!-- Resumen -->
            <aside class="resumen" aria-label="Resumen de tu contratación">
                <div class="resumen__t">Tu contratación</div>
                <div class="resumen__p"><?php echo h($plan['nombre']); ?></div>
                <div class="total">
                    <span class="total__m">$<span id="monto-total"><?php echo numeroMoneda($plan['precio']); ?></span></span>
                    <span class="total__u" id="periodo-txt"><?php echo h($periodoTxt); ?></span>
                </div>
                <?php if ($esUsuario) { ?>
                    <div class="desglose">
                        <div class="fila"><span>Usuarios</span><b id="r-usuarios"><?php echo $cot['usuarios']; ?></b></div>
                        <div class="fila"><span>Precio por usuario al mes</span><b><s id="r-base" <?php echo $cot['descuento'] > 0 ? '' : 'class="d-none"'; ?>>$<?php echo numeroMoneda($cot['base']); ?></s><span id="r-precio">$<?php echo numeroMoneda($cot['precio']); ?></span></b></div>
                        <div class="fila" id="r-desc-fila"<?php echo $cot['descuento'] > 0 ? '' : ' hidden'; ?>><span>Tu descuento</span><b><span class="pill" id="r-desc"><?php echo pct($cot['descuento']); ?>%</span></b></div>
                        <div class="fila"><span>Mensualidad</span><b id="r-mensual">$<?php echo numeroMoneda($cot['mensual']); ?></b></div>
                    </div>
                    <div class="ahorro<?php echo $periodo == 'anual' ? '' : ' d-none'; ?>" id="r-ahorro">Con el plan anual solo pagas <?php echo $cot['meses_pagados']; ?> meses, y los otros <?php echo $cot['meses_gratis']; ?> son gratis. Ahorras $<span id="r-ahorro-m"><?php echo numeroMoneda($cot['ahorro_anual']); ?></span>.</div>
                <?php } ?>
                <?php if ($esUsuario) { ?><p class="nota">Precios en pesos mexicanos, IVA incluido. Cancela cuando quieras.</p><?php } ?>
            </aside>
        </div>

        <p class="pie"><?php echo icono('lock-key'); ?>Pago procesado por Stripe. No guardamos los datos de tu tarjeta.</p>
    </main>

    <script>
        var PK = <?php echo json_encode($pk); ?>;
        var PRODUCTO = <?php echo json_encode($productoClave); ?>;
        var PLAN = <?php echo json_encode($planClave); ?>;
        var PERIODO = <?php echo json_encode($periodo); ?>;
        var TARIFA = <?php echo json_encode($esUsuario ? $tarifa : null); ?>;
        var CAMPOS = <?php echo json_encode(array_map(function ($c) { return $c['name']; }, $campos)); ?>;
        var URL_PANEL = <?php echo json_encode($prod['url_panel']); ?>;
        var NOMBRE = <?php echo json_encode($nombreProd); ?>;
        var ICO_OK = <?php echo json_encode(icono('check-circle')); ?>;
        var ICO_ESPERA = <?php echo json_encode(icono('clock-clockwise')); ?>;
        var stripe = Stripe(PK);
        var checkout = null;
        var sessionId = null;
        var current = 1;

        function $(id) { return document.getElementById(id); }

        function recolectarDatos() {
            var datos = {};
            CAMPOS.forEach(function (n) {
                var el = document.querySelector('#form-datos [name="' + n + '"]');
                datos[n] = el ? el.value.trim() : '';
            });
            return datos;
        }

        function validar(datos) {
            var faltan = [];
            CAMPOS.forEach(function (n) {
                var el = document.querySelector('#form-datos [name="' + n + '"]');
                if (el && el.hasAttribute('required') && datos[n] === '') {
                    var l = document.querySelector('label[for="' + el.id + '"]');
                    faltan.push(l ? l.textContent : n);
                }
            });
            if (datos.correo !== undefined && datos.correo !== '' && !/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(datos.correo)) faltan.push('Correo válido');
            if (datos.password !== undefined && datos.password.length > 0 && datos.password.length < 8) faltan.push('Contraseña de 8 o más caracteres');
            return faltan;
        }

        function mostrarErrores(lista) {
            var box = $('form-errores');
            if (!lista.length) { box.classList.add('d-none'); return; }
            box.textContent = 'Revisa: ' + lista.join(', ');
            box.classList.remove('d-none');
        }

        // ---- Esquema por usuario: descuento lineal ----
        function fmt(n) { return n.toLocaleString('es-MX', { minimumFractionDigits: (n % 1 === 0 ? 0 : 2), maximumFractionDigits: 2 }); }
        function pctTxt(d) { return (Math.round(d * 1000) / 10).toString().replace(/\.0$/, ''); }
        function usuarios() { return Math.max(1, Math.min(100000, parseInt($('cantidad').value, 10) || 1)); }

        // Cálculo local (respuesta inmediata); la cifra definitiva la confirma api/cotizar.php.
        function cotLocal(n) {
            var d = Math.min(TARIFA.tope_descuento, (n - 1) * TARIFA.paso);
            var precio = Math.round(TARIFA.base * (1 - d) * 100) / 100;
            var mensual = Math.round(precio * n * 100) / 100, meses = TARIFA.anual_meses;
            return { usuarios: n, base: TARIFA.base, descuento: d, precio: precio, mensual: mensual,
                total: Math.round(mensual * (PERIODO === 'anual' ? meses : 1) * 100) / 100,
                ahorro_anual: Math.round(mensual * (12 - meses) * 100) / 100, meses_pagados: meses, meses_gratis: 12 - meses,
                tope_usuarios: Math.ceil(TARIFA.tope_descuento / TARIFA.paso) + 1 };
        }
        function pintar(c) {
            var anual = PERIODO === 'anual';
            $('monto-total').textContent = fmt(c.total);
            $('periodo-txt').textContent = anual ? 'MXN / año' : 'MXN / mes';
            $('r-usuarios').textContent = c.usuarios;
            $('r-precio').textContent = '$' + fmt(c.precio);
            $('r-base').textContent = '$' + fmt(c.base);
            $('r-base').classList.toggle('d-none', !(c.descuento > 0));
            $('r-desc-fila').hidden = !(c.descuento > 0);
            $('r-desc').textContent = pctTxt(c.descuento) + '%';
            $('r-mensual').textContent = '$' + fmt(c.mensual);
            $('r-ahorro').classList.toggle('d-none', !anual);
            $('r-ahorro-m').textContent = fmt(c.ahorro_anual);
            var pct = Math.min(100, Math.round(c.descuento / TARIFA.tope_descuento * 100));
            $('med-bar').style.width = pct + '%';
            $('med-txt').innerHTML = c.descuento > 0
                ? 'Con ' + c.usuarios + ' usuarios ahorras <b>' + pctTxt(c.descuento) + '%</b> en cada uno: pagas <b>$' + fmt(c.precio) + '</b> por usuario al mes.'
                : 'Con 1 usuario pagas <b>$' + fmt(c.precio) + '</b> al mes. Súmale usuarios y el precio de todos baja.';
        }
        var cotTimer = null, cotSeq = 0;
        function actualizar() {
            if (!TARIFA) { return; }
            var n = usuarios();
            pintar(cotLocal(n));
            clearTimeout(cotTimer);
            var seq = ++cotSeq;
            cotTimer = setTimeout(function () {
                fetch('api/cotizar.php?producto=' + encodeURIComponent(PRODUCTO) + '&usuarios=' + n + '&periodo=' + PERIODO)
                    .then(function (r) { return r.json(); })
                    .then(function (d) { if (d.ok && seq === cotSeq) { pintar(d); } })
                    .catch(function () {});
            }, 250);
        }
        if (TARIFA) {
            $('cantidad').addEventListener('input', actualizar);
            $('cantidad').addEventListener('change', function () { $('cantidad').value = usuarios(); actualizar(); });
            $('menos').addEventListener('click', function () { $('cantidad').value = Math.max(1, usuarios() - 1); actualizar(); });
            $('mas').addEventListener('click', function () { $('cantidad').value = Math.min(100000, usuarios() + 1); actualizar(); });
            document.querySelectorAll('.seg button').forEach(function (b) {
                b.addEventListener('click', function () {
                    PERIODO = b.getAttribute('data-per');
                    document.querySelectorAll('.seg button').forEach(function (x) { x.setAttribute('aria-pressed', x === b ? 'true' : 'false'); });
                    actualizar();
                });
            });
            actualizar();
        }

        // ---- Pasos ----
        function goStep(n) {
            current = n;
            [1, 2, 3, 4].forEach(function (i) { $('step-' + i).classList.toggle('d-none', i !== n); });
            document.querySelectorAll('#stepper li').forEach(function (el) {
                var s = parseInt(el.getAttribute('data-step'), 10);
                el.classList.toggle('activo', s === n);
                el.classList.toggle('hecho', s < n);
            });
            window.scrollTo(0, 0);
        }

        $('btn-siguiente-1').addEventListener('click', function () { goStep(2); });
        $('btn-atras-2').addEventListener('click', function () { mostrarErrores([]); goStep(1); });
        $('btn-atras-3').addEventListener('click', function () {
            if (checkout) { checkout.destroy(); checkout = null; }
            sessionId = null;
            goStep(2);
        });

        // Paso 2 -> 3: valida, crea la sesión y monta el pago. Los errores (correo
        // o empresa ya registrados, precio sin confirmar) salen aquí, sin avanzar.
        $('form-datos').addEventListener('submit', function (e) {
            e.preventDefault();
            var datos = recolectarDatos();
            var faltan = validar(datos);
            if (faltan.length) { mostrarErrores(faltan); return; }
            mostrarErrores([]);

            var cantidadEl = $('cantidad');
            var payload = {
                producto: PRODUCTO, plan: PLAN, periodo: PERIODO,
                cantidad: cantidadEl ? parseInt(cantidadEl.value || '1', 10) : 1,
                datos: datos
            };

            var btn = $('btn-siguiente-2');
            btn.disabled = true;
            fetch('api/crear-sesion.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify(payload)
            }).then(function (r) { return r.json(); }).then(function (d) {
                btn.disabled = false;
                if (!d.ok || !d.client_secret) { mostrarErrores([d.error || 'No se pudo iniciar el pago.']); return; }
                sessionId = d.session_id || null;
                goStep(3);
                var secret = d.client_secret;
                stripe.initEmbeddedCheckout({
                    fetchClientSecret: function () { return Promise.resolve(secret); },
                    onComplete: function () { goStep(4); confirmar(); }
                }).then(function (c) {
                    checkout = c;
                    $('checkout').innerHTML = '';
                    checkout.mount('#checkout');
                }).catch(function (err) {
                    goStep(2);
                    mostrarErrores([err.message || 'No se pudo iniciar el pago.']);
                });
            }).catch(function () {
                btn.disabled = false;
                mostrarErrores(['No se pudo conectar. Intenta de nuevo.']);
            });
        });

        // Paso 4: confirmación (el aprovisionamiento lo hace el webhook).
        var intentosConf = 0;
        function pintarConf(html) { $('confirmacion').innerHTML = html; }
        function confExito() {
            pintarConf(
                ICO_OK + '<h2>¡Pago confirmado!</h2>' +
                '<p>Estamos activando tu cuenta de ' + NOMBRE + ' y te enviamos un correo de bienvenida. ' +
                'Si el acceso aún no funciona, espera un minuto e inténtalo de nuevo.</p>' +
                '<a href="' + URL_PANEL + '" class="btn btn--p btn--w">Entrar a ' + NOMBRE + '</a>'
            );
        }
        function confPendiente() {
            pintarConf(
                ICO_ESPERA + '<h2>Procesando tu pago…</h2>' +
                '<p>Recibirás un correo en cuanto tu cuenta esté lista.</p>' +
                '<a href="' + URL_PANEL + '" class="btn btn--p btn--w">Ir al acceso</a>'
            );
        }
        function confirmar() {
            if (!sessionId) { confExito(); return; }
            fetch('api/estado-sesion.php?session_id=' + encodeURIComponent(sessionId))
                .then(function (r) { return r.json(); })
                .then(function (d) {
                    if (d.ok && (d.payment_status === 'paid' || d.payment_status === 'no_payment_required')) { confExito(); return; }
                    intentosConf++;
                    if (intentosConf > 4) { confPendiente(); return; }
                    setTimeout(confirmar, 2000);
                })
                .catch(function () { intentosConf++; if (intentosConf > 4) { confPendiente(); } else { setTimeout(confirmar, 2000); } });
        }
    </script>
</body>

</html>
