<?= $this->extend('layouts/main') ?>
<?php
/** @var array $promocionesData */
$promocionesData = $promocionesData ?? [];

$diasCortos = [
    'LUNES' => 'Lun', 'MARTES' => 'Mar', 'MIERCOLES' => 'Mié',
    'JUEVES' => 'Jue', 'VIERNES' => 'Vie', 'SABADO' => 'Sáb', 'DOMINGO' => 'Dom',
];
?>

<?= $this->section('title') ?>Promociones<?= $this->endSection() ?>

<?= $this->section('content') ?>
<section class="section-block pr-section">
    <div class="section-heading">
        <div>
            <span class="eyebrow">Promociones</span>
            <h2>Ofertas para todos los públicos</h2>
        </div>
    </div>

    <div class="membership-box">
        <p>Los combos se agregan directo a tu carrito de alimentos. Las promociones de entradas te llevan a la cartelera para elegir tu función; el descuento se aplica solo al seleccionar tus asientos.</p>
    </div>

    <?php if (empty($promocionesData)): ?>
        <div class="empty-state">No hay promociones disponibles en este momento.</div>
    <?php else: ?>
        <div class="pr-grid">
            <?php foreach ($promocionesData as $data): ?>
                <?php
                    $promocion = $data['promocion'];
                    $bundle = $data['bundle'];
                    $vigente = $data['vigente'];
                ?>
                <article class="pr-card <?= $vigente ? '' : 'pr-card-inactive' ?>">
                    <div class="pr-card-img" style="background-image:url('<?= esc($data['imagen_url']) ?>');">
                        <span class="pr-type-badge pr-type-<?= strtolower(esc($promocion->tipo)) ?>">
                            <?= $data['es_entrada'] ? '🎟 Entradas' : '🍿 Combo' ?>
                        </span>
                        <?php if (!$vigente): ?>
                            <span class="pr-expired-badge">No disponible</span>
                        <?php endif; ?>
                    </div>

                    <div class="pr-card-body">
                        <h3><?= esc($promocion->nombre) ?></h3>
                        <p class="pr-description"><?= esc($promocion->descripcion) ?></p>

                        <?php if (!empty($data['tipo_sala'])): ?>
                            <span class="pr-day-chip pr-day-active" style="align-self:flex-start;">Solo salas <?= esc($data['tipo_sala']) ?></span>
                        <?php endif; ?>

                        <?php if (!empty($data['dias'])): ?>
                            <div class="pr-days">
                                <?php foreach (\App\Models\PromocionDiaModel::DIAS_VALIDOS as $diaEnum): ?>
                                    <?php if (in_array($diaEnum, $data['dias'], true)): ?>
                                        <span class="pr-day-chip pr-day-active"><?= $diasCortos[$diaEnum] ?></span>
                                    <?php else: ?>
                                        <span class="pr-day-chip"><?= $diasCortos[$diaEnum] ?></span>
                                    <?php endif; ?>
                                <?php endforeach; ?>
                            </div>
                        <?php endif; ?>

                        <?php if ($bundle !== null && !empty($bundle['items'])): ?>
                            <div class="pr-combo-includes">
                                <span class="pr-combo-includes-label">Incluye:</span>
                                <ul>
                                    <?php foreach ($bundle['items'] as $item): ?>
                                        <li><?= esc($item['cantidad']) ?>× <?= esc($item['nombre']) ?></li>
                                    <?php endforeach; ?>
                                </ul>
                            </div>
                        <?php endif; ?>

                        <div class="pr-validity">
                            <span>Válido del <?= esc(date('d/m/Y', strtotime($promocion->fecha_inicio))) ?> al <?= esc(date('d/m/Y', strtotime($promocion->fecha_fin))) ?></span>
                        </div>

                        <?php if (!$vigente): ?>
                            <p class="pr-motivo">⚠ <?= esc($data['motivo_no_vigente']) ?></p>
                        <?php endif; ?>

                        <div class="pr-price-row">
                            <?php if ($bundle !== null): ?>
                                <span class="pr-price-old">S/ <?= number_format($bundle['precio_normal_total'], 2) ?></span>
                                <span class="pr-price-final">S/ <?= number_format($bundle['precio_promo_total'], 2) ?></span>
                            <?php elseif ($promocion->tipo_descuento === 'PORCENTAJE'): ?>
                                <span class="pr-price-final">-<?= esc((string) rtrim(rtrim(number_format($promocion->valor_descuento, 1), '0'), '.')) ?>% en tu entrada</span>
                            <?php else: ?>
                                <span class="pr-price-final">Entrada a S/ <?= number_format($promocion->valor_descuento, 2) ?></span>
                            <?php endif; ?>
                        </div>

                        <div class="pr-card-actions">
                            <?php if ($data['es_entrada']): ?>
                                <a href="<?= $vigente ? base_url('promociones/aplicar/' . $promocion->id_promocion) : '#' ?>"
                                   class="btn btn-primary pr-btn <?= $vigente ? '' : 'pr-btn-disabled' ?>"
                                   <?= $vigente ? '' : 'aria-disabled="true" onclick="return false;"' ?>>
                                    Aprovechar promoción
                                </a>
                            <?php else: ?>
                                <button type="button"
                                    class="btn btn-primary pr-btn pr-add-to-cart"
                                    data-id-promocion="<?= esc($promocion->id_promocion) ?>"
                                    <?= $vigente ? '' : 'disabled' ?>>
                                    Agregar al carrito
                                </button>
                            <?php endif; ?>
                        </div>
                    </div>
                </article>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>
</section>

<div class="pr-toast-stack" id="pr-toast-stack" aria-live="polite"></div>

<?= view('partials/carrito_widget', ['carrito' => $carrito ?? ['items' => [], 'subtotal' => 0.0, 'descuento_pct' => 0.0, 'descuento_monto' => 0.0, 'total' => 0.0]]) ?>

<script>
document.addEventListener('DOMContentLoaded', function () {
    const toastStack = document.getElementById('pr-toast-stack');

    function showToast(message, type) {
        const toast = document.createElement('div');
        toast.className = 'pr-toast pr-toast-' + (type === 'error' ? 'error' : 'success');
        toast.innerHTML = '<span class="pr-toast-icon">' + (type === 'error' ? '⚠' : '✓') + '</span>' +
                           '<span class="pr-toast-msg"></span>' +
                           (type === 'error' ? '' : '<a href="#" class="pr-toast-link pr-toast-open-cart">Ver carrito</a>');
        toast.querySelector('.pr-toast-msg').textContent = message;
        if (type !== 'error') {
            toast.querySelector('.pr-toast-open-cart').addEventListener('click', function (e) {
                e.preventDefault();
                window.CineCart.open();
            });
        }
        toastStack.appendChild(toast);

        requestAnimationFrame(() => toast.classList.add('is-visible'));

        setTimeout(function () {
            toast.classList.remove('is-visible');
            setTimeout(() => toast.remove(), 300);
        }, 4200);
    }

    document.querySelectorAll('.pr-add-to-cart').forEach(function (button) {
        button.addEventListener('click', function () {
            if (button.disabled) return;
            const idPromocion = button.dataset.idPromocion;
            button.disabled = true;
            const textoOriginal = button.textContent;
            button.textContent = 'Agregando…';

            fetch('<?= base_url('alimentos/promocion') ?>/' + idPromocion, {
                method: 'POST',
                headers: {
                    'X-Requested-With': 'XMLHttpRequest',
                    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
                },
                body: new URLSearchParams({ ajax: '1' })
            })
                .then(function (response) { return response.json(); })
                .then(function (result) {
                    showToast(result.message || (result.success ? 'Promoción agregada.' : 'No se pudo agregar la promoción.'), result.success ? 'success' : 'error');
                    if (result.success && result.cart) {
                        window.CineCart.refresh(result.cart);
                    }
                })
                .catch(function () {
                    showToast('Ocurrió un error al agregar la promoción. Intenta nuevamente.', 'error');
                })
                .finally(function () {
                    button.disabled = false;
                    button.textContent = textoOriginal;
                });
        });
    });
});
</script>
<?= $this->endSection() ?>
