<?php
/**
 * Munresa Promociones
 *
 * Este archivo NO registra el CPT.
 * El CPT munresa_promocion ya existe en munresa-admin.php.
 *
 * Funcionalidad:
 * - Crea una pantalla personalizada dentro del WP Admin.
 * - Usa el CPT existente munresa_promocion como almacenamiento.
 * - Permite crear, editar y eliminar promociones desde un formulario directo.
 * - Muestra promociones en frontend mediante shortcode.
 *
 * Shortcodes:
 * [munresa_promociones pagina="munresa"]
 * [munresa_promociones pagina="compensadores"]
 */

if (!defined('ABSPATH')) {
    exit;
}

/* =========================================================
 * CONFIG
 * ========================================================= */

function munresa_promociones_get_image_id($post_id) {

    $image_id = absint(get_post_meta($post_id, '_munresa_promocion_image_id', true));

    if (!$image_id) {
        $image_id = absint(get_post_thumbnail_id($post_id));
    }

    return $image_id;
}

/* =========================================================
 * MENÚ ADMIN PERSONALIZADO DENTRO DE WP
 * ========================================================= */

add_action('admin_menu', 'munresa_promociones_register_admin_page', 31);

function munresa_promociones_register_admin_page() {

    add_menu_page(
        'Promociones',
        'Promociones',
        'manage_munresa_promos',
        'munresa-promociones',
        'munresa_promociones_render_admin_page',
        'dashicons-tag',
        27
    );
}

/*
 * Ocultar menú nativo del CPT para evitar confusión.
 * El CPT sigue existiendo, pero el usuario ve solo el formulario personalizado.
 */
add_action('admin_menu', 'munresa_promociones_hide_native_cpt_menu', 9999);

function munresa_promociones_hide_native_cpt_menu() {
    remove_menu_page('edit.php?post_type=munresa_promocion');
}

/* =========================================================
 * RENDER ADMIN PAGE
 * ========================================================= */

function munresa_promociones_render_admin_page() {

    if (!current_user_can('edit_munresa_promociones') && !current_user_can('manage_munresa_promos')) {
        wp_die('No tienes permisos para administrar promociones.');
    }

    $edit_id = isset($_GET['editar']) ? absint($_GET['editar']) : 0;
    $editing_post = null;

    if ($edit_id > 0 && get_post_type($edit_id) === 'munresa_promocion') {
        $editing_post = get_post($edit_id);
    }

    $form_data = munresa_promociones_get_form_data($editing_post);

    wp_enqueue_media();
    wp_enqueue_editor();

    ?>
    <div class="wrap munresa-promociones-admin-wrap">

        <?php munresa_promociones_print_notices(); ?>

        <div class="munresa-box munresa-box-form">
            <div class="munresa-box-header">
                <h2><?php echo $editing_post ? 'Editar promoción' : 'Agregar nueva promoción'; ?></h2>
            </div>

            <div class="munresa-box-body">
                <form method="post" enctype="multipart/form-data" action="<?php echo esc_url(admin_url('admin.php?page=munresa-promociones')); ?>">

                    <?php wp_nonce_field('munresa_promocion_save', 'munresa_promocion_nonce'); ?>
                    <input type="hidden" name="munresa_promocion_action" value="save">

                    <?php if ($editing_post) : ?>
                        <input type="hidden" name="munresa_promocion_id" value="<?php echo esc_attr($editing_post->ID); ?>">
                    <?php endif; ?>

                    <div class="munresa-admin-field munresa-admin-field-full">
                        <label for="munresa_promocion_titulo">Título</label>
                        <input
                            type="text"
                            id="munresa_promocion_titulo"
                            name="munresa_promocion_titulo"
                            value="<?php echo esc_attr($form_data['titulo']); ?>"
                            required
                        >
                    </div>

                    <div class="munresa-admin-grid">
                        <div class="munresa-admin-field">
                            <label for="munresa_promocion_fecha_inicio">Fecha de inicio</label>
                            <input
                                type="date"
                                id="munresa_promocion_fecha_inicio"
                                name="munresa_promocion_fecha_inicio"
                                value="<?php echo esc_attr($form_data['fecha_inicio']); ?>"
                            >
                        </div>

                        <div class="munresa-admin-field">
                            <label for="munresa_promocion_fecha_final">Fecha final</label>
                            <input
                                type="date"
                                id="munresa_promocion_fecha_final"
                                name="munresa_promocion_fecha_final"
                                value="<?php echo esc_attr($form_data['fecha_final']); ?>"
                            >
                        </div>
                    </div>

                    <div class="munresa-admin-grid munresa-admin-grid-2-1">
                        <div class="munresa-admin-field">
                            <label for="munresa_promocion_imagen">Imagen</label>
                            <input
                                type="file"
                                id="munresa_promocion_imagen"
                                name="munresa_promocion_imagen"
                                accept="image/*"
                            >

                            <p class="description munresa-description-red">
                                Dimensiones recomendadas: 1400 x 600 px
                            </p>

                            <?php if (!empty($form_data['image_url'])) : ?>
                                <div class="munresa-current-image">
                                    <img src="<?php echo esc_url($form_data['image_url']); ?>" alt="">
                                </div>
                            <?php endif; ?>
                        </div>

                        <div class="munresa-admin-options">
                            <div>
                                <label>Página</label>

                                <label class="munresa-admin-radio">
                                    <input
                                        type="radio"
                                        name="munresa_promocion_pagina"
                                        value="munresa"
                                        <?php checked($form_data['pagina'], 'munresa'); ?>
                                    >
                                    MUNRESA
                                </label>

                                <label class="munresa-admin-radio">
                                    <input
                                        type="radio"
                                        name="munresa_promocion_pagina"
                                        value="compensadores"
                                        <?php checked($form_data['pagina'], 'compensadores'); ?>
                                    >
                                    Compensadores
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="munresa-admin-grid">
                        <div class="munresa-admin-field">
                            <label for="munresa_promocion_descripcion_corta">Descripción corta</label>
                            <input
                                type="text"
                                id="munresa_promocion_descripcion_corta"
                                name="munresa_promocion_descripcion_corta"
                                value="<?php echo esc_attr($form_data['descripcion_corta']); ?>"
                            >
                        </div>

                        <div class="munresa-admin-field">
                            <label for="munresa_promocion_precio">Precio opcional</label>
                            <input
                                type="text"
                                id="munresa_promocion_precio"
                                name="munresa_promocion_precio"
                                value="<?php echo esc_attr($form_data['precio']); ?>"
                                placeholder="Ej: ₡45.000 / 15% descuento / Desde ₡..."
                            >
                        </div>
                    </div>

                    <div class="munresa-editor-wrap">
                        <label for="munresa_promocion_descripcion_larga">Descripción larga</label>
                        <?php
                        wp_editor(
                            $form_data['descripcion_larga'],
                            'munresa_promocion_descripcion_larga',
                            array(
                                'textarea_name' => 'munresa_promocion_descripcion_larga',
                                'media_buttons' => false,
                                'textarea_rows' => 8,
                                'teeny'         => false,
                                'quicktags'     => true,
                            )
                        );
                        ?>
                    </div>

                    <div class="munresa-form-actions">
                        <button type="submit" class="button button-primary button-large">
                            Guardar
                        </button>

                        <?php if ($editing_post) : ?>
                            <a class="button button-secondary button-large" href="<?php echo esc_url(admin_url('admin.php?page=munresa-promociones')); ?>">
                                Crear nueva
                            </a>
                        <?php endif; ?>
                    </div>

                </form>
            </div>
        </div>

        <?php munresa_promociones_render_list(); ?>

    </div>
    <?php
}

/* =========================================================
 * FORM DATA
 * ========================================================= */

function munresa_promociones_get_form_data($post = null) {

    $data = array(
        'titulo'            => '',
        'fecha_inicio'      => '',
        'fecha_final'       => '',
        'pagina'            => 'munresa',
        'descripcion_corta' => '',
        'precio'            => '',
        'descripcion_larga' => '',
        'image_id'          => 0,
        'image_url'         => '',
    );

    if (!$post || empty($post->ID)) {
        return $data;
    }

    $data['titulo']            = $post->post_title;
    $data['descripcion_larga'] = $post->post_content;
    $data['fecha_inicio']      = get_post_meta($post->ID, '_munresa_promocion_fecha_inicio', true);
    $data['fecha_final']       = get_post_meta($post->ID, '_munresa_promocion_fecha_final', true);
    $data['pagina']            = get_post_meta($post->ID, '_munresa_promocion_pagina', true);
    $data['descripcion_corta'] = get_post_meta($post->ID, '_munresa_promocion_descripcion_corta', true);
    $data['precio']            = get_post_meta($post->ID, '_munresa_promocion_precio', true);
    $data['image_id']          = munresa_promociones_get_image_id($post->ID);

    if (!in_array($data['pagina'], array('munresa', 'compensadores'), true)) {
        $data['pagina'] = 'munresa';
    }

    if ($data['image_id']) {
        $data['image_url'] = wp_get_attachment_image_url($data['image_id'], 'medium');
    }

    return $data;
}

/* =========================================================
 * HANDLE SAVE / DELETE
 * ========================================================= */

add_action('admin_init', 'munresa_promociones_admin_init_actions');

function munresa_promociones_admin_init_actions() {

    if (!is_admin()) {
        return;
    }

    $page = isset($_GET['page']) ? sanitize_key($_GET['page']) : '';

    if ($page !== 'munresa-promociones') {
        return;
    }

    munresa_promociones_handle_actions();
}

function munresa_promociones_handle_actions() {

    if (isset($_POST['munresa_promocion_action']) && $_POST['munresa_promocion_action'] === 'save') {
        munresa_promociones_handle_save();
    }

    if (isset($_GET['accion'], $_GET['id']) && $_GET['accion'] === 'eliminar') {
        munresa_promociones_handle_delete();
    }
}

function munresa_promociones_handle_save() {

    if (
        !isset($_POST['munresa_promocion_nonce']) ||
        !wp_verify_nonce(
            sanitize_text_field(wp_unslash($_POST['munresa_promocion_nonce'])),
            'munresa_promocion_save'
        )
    ) {
        munresa_promociones_redirect_with_notice('error_nonce');
    }

    if (!current_user_can('edit_munresa_promociones') && !current_user_can('manage_munresa_promos')) {
        munresa_promociones_redirect_with_notice('error_permisos');
    }

    $post_id = isset($_POST['munresa_promocion_id']) ? absint($_POST['munresa_promocion_id']) : 0;

    $titulo = isset($_POST['munresa_promocion_titulo'])
        ? sanitize_text_field(wp_unslash($_POST['munresa_promocion_titulo']))
        : '';

    $fecha_inicio = isset($_POST['munresa_promocion_fecha_inicio'])
        ? sanitize_text_field(wp_unslash($_POST['munresa_promocion_fecha_inicio']))
        : '';

    $fecha_final = isset($_POST['munresa_promocion_fecha_final'])
        ? sanitize_text_field(wp_unslash($_POST['munresa_promocion_fecha_final']))
        : '';

    $pagina = isset($_POST['munresa_promocion_pagina'])
        ? sanitize_text_field(wp_unslash($_POST['munresa_promocion_pagina']))
        : 'munresa';

    $descripcion_corta = isset($_POST['munresa_promocion_descripcion_corta'])
        ? sanitize_text_field(wp_unslash($_POST['munresa_promocion_descripcion_corta']))
        : '';

    $precio = isset($_POST['munresa_promocion_precio'])
        ? sanitize_text_field(wp_unslash($_POST['munresa_promocion_precio']))
        : '';

    $descripcion_larga = isset($_POST['munresa_promocion_descripcion_larga'])
        ? wp_kses_post(wp_unslash($_POST['munresa_promocion_descripcion_larga']))
        : '';

    if (empty($titulo)) {
        munresa_promociones_redirect_with_notice('error_titulo');
    }

    if (!in_array($pagina, array('munresa', 'compensadores'), true)) {
        $pagina = 'munresa';
    }

    $post_data = array(
        'post_type'    => 'munresa_promocion',
        'post_status'  => 'publish',
        'post_title'   => $titulo,
        'post_content' => $descripcion_larga,
        'post_excerpt' => $descripcion_corta,
    );

    if ($post_id > 0 && get_post_type($post_id) === 'munresa_promocion') {
        if (!current_user_can('edit_post', $post_id)) {
            munresa_promociones_redirect_with_notice('error_permisos');
        }

        $post_data['ID'] = $post_id;
        $saved_id = wp_update_post($post_data, true);
    } else {
        $saved_id = wp_insert_post($post_data, true);
    }

    if (is_wp_error($saved_id) || !$saved_id) {
        munresa_promociones_redirect_with_notice('error_guardar');
    }

    update_post_meta($saved_id, '_munresa_promocion_fecha_inicio', $fecha_inicio);
    update_post_meta($saved_id, '_munresa_promocion_fecha_final', $fecha_final);
    update_post_meta($saved_id, '_munresa_promocion_pagina', $pagina);
    update_post_meta($saved_id, '_munresa_promocion_descripcion_corta', $descripcion_corta);
    update_post_meta($saved_id, '_munresa_promocion_precio', $precio);

    munresa_promociones_handle_image_upload($saved_id);

    munresa_promociones_redirect_with_notice('guardado');
}

function munresa_promociones_handle_image_upload($post_id) {

    if (
        empty($_FILES['munresa_promocion_imagen']) ||
        empty($_FILES['munresa_promocion_imagen']['name'])
    ) {
        return;
    }

    if (!current_user_can('upload_files')) {
        return;
    }

    require_once ABSPATH . 'wp-admin/includes/image.php';
    require_once ABSPATH . 'wp-admin/includes/file.php';
    require_once ABSPATH . 'wp-admin/includes/media.php';

    $attachment_id = media_handle_upload('munresa_promocion_imagen', $post_id);

    if (is_wp_error($attachment_id) || !$attachment_id) {
        return;
    }

    update_post_meta($post_id, '_munresa_promocion_image_id', absint($attachment_id));
    set_post_thumbnail($post_id, absint($attachment_id));
}

function munresa_promociones_handle_delete() {

    $post_id = isset($_GET['id']) ? absint($_GET['id']) : 0;
    $nonce   = isset($_GET['_wpnonce']) ? sanitize_text_field(wp_unslash($_GET['_wpnonce'])) : '';

    if (!$post_id || get_post_type($post_id) !== 'munresa_promocion') {
        munresa_promociones_redirect_with_notice('error_eliminar');
    }

    if (!wp_verify_nonce($nonce, 'munresa_promocion_delete_' . $post_id)) {
        munresa_promociones_redirect_with_notice('error_nonce');
    }

    if (!current_user_can('delete_post', $post_id)) {
        munresa_promociones_redirect_with_notice('error_permisos');
    }

    wp_trash_post($post_id);

    munresa_promociones_redirect_with_notice('eliminado');
}

function munresa_promociones_redirect_with_notice($notice) {

    $url = add_query_arg(
        array(
            'page' => 'munresa-promociones',
            'msg'  => sanitize_key($notice),
        ),
        admin_url('admin.php')
    );

    wp_safe_redirect($url);
    exit;
}

/* =========================================================
 * NOTICES
 * ========================================================= */

function munresa_promociones_print_notices() {

    $msg = isset($_GET['msg']) ? sanitize_key($_GET['msg']) : '';

    if (!$msg) {
        return;
    }

    $messages = array(
        'guardado'       => array('success', 'La promoción fue guardada correctamente.'),
        'eliminado'      => array('success', 'La promoción fue eliminada correctamente.'),
        'error_nonce'    => array('error', 'La solicitud no es válida. Inténtalo nuevamente.'),
        'error_permisos' => array('error', 'No tienes permisos para realizar esta acción.'),
        'error_titulo'   => array('error', 'El título es obligatorio.'),
        'error_guardar'  => array('error', 'No se pudo guardar la promoción.'),
        'error_eliminar' => array('error', 'No se pudo eliminar la promoción.'),
    );

    if (empty($messages[$msg])) {
        return;
    }

    $type  = $messages[$msg][0];
    $text  = $messages[$msg][1];
    $class = $type === 'success' ? 'notice notice-success' : 'notice notice-error';

    echo '<div class="' . esc_attr($class) . ' is-dismissible"><p>' . esc_html($text) . '</p></div>';
}

/* =========================================================
 * LISTADO DE PROMOCIONES REGISTRADAS
 * ========================================================= */

function munresa_promociones_render_list() {

    $query = new WP_Query(array(
        'post_type'      => 'munresa_promocion',
        'post_status'    => array('publish', 'draft', 'pending'),
        'posts_per_page' => 30,
        'orderby'        => 'date',
        'order'          => 'DESC',
    ));

    ?>
    <div class="munresa-box munresa-box-list">
        <div class="munresa-box-header">
            <h2>Promociones registradas</h2>
        </div>

        <div class="munresa-box-body">

            <?php if (!$query->have_posts()) : ?>

                <p>No hay promociones registradas todavía.</p>

            <?php else : ?>

                <table class="widefat striped munresa-table">
                    <thead>
                        <tr>
                            <th>Título</th>
                            <th>Página</th>
                            <th>Precio</th>
                            <th>Vigencia</th>
                            <th style="width:160px;">Acciones</th>
                        </tr>
                    </thead>

                    <tbody>
                        <?php while ($query->have_posts()) : $query->the_post(); ?>

                            <?php
                            $post_id = get_the_ID();

                            $pagina = get_post_meta($post_id, '_munresa_promocion_pagina', true);
                            $precio = get_post_meta($post_id, '_munresa_promocion_precio', true);
                            $inicio = get_post_meta($post_id, '_munresa_promocion_fecha_inicio', true);
                            $final  = get_post_meta($post_id, '_munresa_promocion_fecha_final', true);

                            $edit_url = add_query_arg(
                                array(
                                    'page'   => 'munresa-promociones',
                                    'editar' => $post_id,
                                ),
                                admin_url('admin.php')
                            );

                            $delete_url = wp_nonce_url(
                                add_query_arg(
                                    array(
                                        'page'   => 'munresa-promociones',
                                        'accion' => 'eliminar',
                                        'id'     => $post_id,
                                    ),
                                    admin_url('admin.php')
                                ),
                                'munresa_promocion_delete_' . $post_id
                            );
                            ?>

                            <tr>
                                <td>
                                    <strong><?php echo esc_html(get_the_title()); ?></strong>
                                </td>

                                <td>
                                    <?php echo $pagina === 'compensadores' ? 'Compensadores' : 'Munresa'; ?>
                                </td>

                                <td>
                                    <?php echo !empty($precio) ? esc_html($precio) : '—'; ?>
                                </td>

                                <td>
                                    <?php
                                    if (empty($inicio) && empty($final)) {
                                        echo 'Sin límite';
                                    } else {
                                        echo esc_html($inicio ?: 'Sin inicio') . ' / ' . esc_html($final ?: 'Sin final');
                                    }
                                    ?>
                                </td>

                                <td>
                                    <a href="<?php echo esc_url($edit_url); ?>">
                                        Editar
                                    </a>
                                    |
                                    <a
                                        href="<?php echo esc_url($delete_url); ?>"
                                        style="color:#b32d2e;"
                                        onclick="return confirm('¿Deseas eliminar esta promoción?');"
                                    >
                                        Eliminar
                                    </a>
                                </td>
                            </tr>

                        <?php endwhile; ?>
                    </tbody>
                </table>

            <?php endif; ?>

        </div>
    </div>

    <?php wp_reset_postdata(); ?>
    <?php
}

/* =========================================================
 * ADMIN CSS
 * Reutiliza el diseño definido para Novedades.
 * ========================================================= */

add_action('admin_enqueue_scripts', 'munresa_promociones_admin_styles');

function munresa_promociones_admin_styles($hook) {

    if ($hook !== 'toplevel_page_munresa-promociones') {
        return;
    }

    wp_register_style('munresa-promociones-admin', false);
    wp_enqueue_style('munresa-promociones-admin');

    wp_add_inline_style('munresa-promociones-admin', '
        .munresa-promociones-admin-wrap {
            max-width: 1120px;
            margin-top: 18px;
        }

        .munresa-box {
            background: #ffffff;
            border: 1px solid #dcdcde;
            border-radius: 8px;
            overflow: hidden;
            margin-bottom: 24px;
            box-shadow: 0 1px 2px rgba(0,0,0,0.03);
        }

        .munresa-box-header {
            padding: 16px 20px;
            border-bottom: 1px solid #e5e7eb;
            background: #ffffff;
        }

        .munresa-box-header h2 {
            margin: 0;
            font-size: 24px;
            line-height: 1.2;
            font-weight: 700;
            color: #1d2327;
        }

        .munresa-box-form .munresa-box-header {
            border-left: 5px solid #e30613;
        }

        .munresa-box-list .munresa-box-header {
            border-left: 5px solid #273b91;
        }

        .munresa-box-body {
            padding: 18px 20px 20px;
        }

        .munresa-admin-grid {
            display: grid;
            grid-template-columns: repeat(2, minmax(0, 1fr));
            gap: 16px 20px;
            margin-bottom: 14px;
        }

        .munresa-admin-grid-2-1 {
            grid-template-columns: minmax(0, 1fr) minmax(260px, 0.95fr);
            align-items: start;
        }

        .munresa-admin-field {
            margin-bottom: 14px;
        }

        .munresa-admin-field-full {
            width: 100%;
            grid-column: 1 / -1;
        }

        .munresa-admin-field label,
        .munresa-admin-options > div > label,
        .munresa-admin-field > label {
            display: block;
            margin-bottom: 5px;
            font-weight: 600;
            font-size: 13px;
            color: #1d2327;
        }

        .munresa-admin-field input[type="text"],
        .munresa-admin-field input[type="date"] {
            width: 100%;
            max-width: 100%;
            min-height: 38px;
        }

        #munresa_promocion_titulo {
            width: 100%;
            max-width: 100%;
            min-height: 40px;
            font-size: 16px;
            padding: 6px 10px;
        }

        .munresa-admin-options {
            background: #f8f9fa;
            border: 1px solid #e5e7eb;
            border-radius: 6px;
            padding: 14px 16px;
            min-height: 92px;
            display: flex;
            align-items: center;
        }

        .munresa-admin-radio {
            display: inline-flex;
            align-items: center;
            gap: 5px;
            margin-right: 14px;
            font-weight: 600;
            font-size: 13px;
        }

        .munresa-current-image {
            margin-top: 10px;
            max-width: 220px;
            border: 1px solid #dcdcde;
            background: #f6f7f7;
            padding: 5px;
            border-radius: 4px;
        }

        .munresa-current-image img {
            display: block;
            max-width: 100%;
            height: auto;
        }

        .munresa-description-red {
            color: #b00000;
            margin-top: 6px !important;
            font-size: 12px;
        }

        .munresa-editor-wrap {
            margin-top: 6px;
            margin-bottom: 16px;
        }

        .munresa-editor-wrap label {
            display: block;
            margin-bottom: 6px;
            font-weight: 600;
            font-size: 13px;
            color: #1d2327;
        }

        .munresa-form-actions {
            display: flex;
            gap: 8px;
            align-items: center;
            flex-wrap: wrap;
            margin-top: 14px;
        }

        .munresa-form-actions .button-primary {
            background: #e30613;
            border-color: #e30613;
        }

        .munresa-form-actions .button-primary:hover,
        .munresa-form-actions .button-primary:focus {
            background: #c7000b;
            border-color: #c7000b;
        }

        .munresa-box-body table.widefat {
            margin-top: 0;
        }

        .munresa-box-body table.widefat th,
        .munresa-box-body table.widefat td {
            padding-top: 10px;
            padding-bottom: 10px;
            vertical-align: middle;
        }

        @media (max-width: 900px) {
            .munresa-admin-grid,
            .munresa-admin-grid-2-1 {
                grid-template-columns: 1fr;
            }

            .munresa-box-body {
                padding: 16px;
            }

            .munresa-box-header {
                padding: 14px 16px;
            }

            .munresa-box-header h2 {
                font-size: 22px;
            }
        }
    ');
}

/* =========================================================
 * SHORTCODE FRONTEND
 * ========================================================= */

add_shortcode('munresa_promociones', 'munresa_promociones_shortcode');

function munresa_promociones_shortcode($atts) {

    $atts = shortcode_atts(array(
        'pagina'   => 'munresa',
        'cantidad' => 5,
        'clase'    => '',
    ), $atts, 'munresa_promociones');

    $pagina   = sanitize_text_field($atts['pagina']);
    $cantidad = absint($atts['cantidad']);

    if ($cantidad <= 0) {
        $cantidad = 1;
    }

    if (!in_array($pagina, array('munresa', 'compensadores'), true)) {
        $pagina = 'munresa';
    }

    $today = current_time('Y-m-d');

    $query = new WP_Query(array(
        'post_type'      => 'munresa_promocion',
        'post_status'    => 'publish',
        'posts_per_page' => $cantidad,
        'orderby'        => 'date',
        'order'          => 'DESC',
        'meta_query'     => array(
            'relation' => 'AND',

            array(
                'key'     => '_munresa_promocion_pagina',
                'value'   => $pagina,
                'compare' => '=',
            ),

            array(
                'relation' => 'OR',
                array(
                    'key'     => '_munresa_promocion_fecha_inicio',
                    'compare' => 'NOT EXISTS',
                ),
                array(
                    'key'     => '_munresa_promocion_fecha_inicio',
                    'value'   => '',
                    'compare' => '=',
                ),
                array(
                    'key'     => '_munresa_promocion_fecha_inicio',
                    'value'   => $today,
                    'compare' => '<=',
                    'type'    => 'DATE',
                ),
            ),

            array(
                'relation' => 'OR',
                array(
                    'key'     => '_munresa_promocion_fecha_final',
                    'compare' => 'NOT EXISTS',
                ),
                array(
                    'key'     => '_munresa_promocion_fecha_final',
                    'value'   => '',
                    'compare' => '=',
                ),
                array(
                    'key'     => '_munresa_promocion_fecha_final',
                    'value'   => $today,
                    'compare' => '>=',
                    'type'    => 'DATE',
                ),
            ),
        ),
    ));

    if (!$query->have_posts()) {
        wp_reset_postdata();
        return '';
    }

    munresa_promociones_frontend_styles();
    munresa_promociones_frontend_script();

    $extra_class = !empty($atts['clase']) ? sanitize_html_class($atts['clase']) : '';
    $slider_id   = 'munresa-promociones-slider-' . wp_rand(1000, 9999);
    $total_posts = (int) $query->post_count;

    ob_start();
    ?>

    <section
        id="<?php echo esc_attr($slider_id); ?>"
        class="munresa-promociones-publicidad munresa-promociones-slider munresa-promociones-<?php echo esc_attr($pagina); ?> <?php echo esc_attr($extra_class); ?>"
        data-autoplay="true"
        data-interval="6000"
    >
        <div class="munresa-promociones-slider-viewport">

            <?php
            $index = 0;

            while ($query->have_posts()) :
                $query->the_post();

                $post_id = get_the_ID();

                $image_id  = munresa_promociones_get_image_id($post_id);
                $image_url = '';

                if ($image_id) {
                    $image_url = wp_get_attachment_image_url($image_id, 'large');
                }

                $descripcion_corta = get_post_meta($post_id, '_munresa_promocion_descripcion_corta', true);
                $precio            = get_post_meta($post_id, '_munresa_promocion_precio', true);
                ?>

                <article class="munresa-promocion-slide <?php echo $index === 0 ? 'active' : ''; ?> <?php echo empty($image_url) ? 'munresa-promocion-no-image' : ''; ?>" data-slide="<?php echo esc_attr($index); ?>">

                    <?php if (!empty($image_url)) : ?>
                        <div class="munresa-promocion-ad-image">
                            <img src="<?php echo esc_url($image_url); ?>" alt="<?php echo esc_attr(get_the_title()); ?>">
                        </div>
                    <?php endif; ?>

                    <div class="munresa-promocion-ad-content">
                        <span class="munresa-promocion-ad-label">Promociones</span>

                        <h2 class="munresa-promocion-ad-title">
                            <?php echo esc_html(get_the_title()); ?>
                        </h2>

                        <?php if (!empty($descripcion_corta)) : ?>
                            <p class="munresa-promocion-short">
                                <?php echo esc_html($descripcion_corta); ?>
                            </p>
                        <?php endif; ?>

                        <?php if (!empty($precio)) : ?>
                            <div class="munresa-promocion-price">
                                <?php echo esc_html($precio); ?>
                            </div>
                        <?php endif; ?>

                        <div class="munresa-promocion-ad-text">
                            <?php echo wp_kses_post(apply_filters('the_content', get_the_content())); ?>
                        </div>
                    </div>

                </article>

                <?php
                $index++;
            endwhile;
            ?>

        </div>

        <?php if ($total_posts > 1) : ?>
            <button type="button" class="munresa-promociones-prev" aria-label="Promoción anterior">
                ‹
            </button>

            <button type="button" class="munresa-promociones-next" aria-label="Siguiente promoción">
                ›
            </button>

            <div class="munresa-promociones-dots" aria-label="Indicadores de promociones">
                <?php for ($i = 0; $i < $total_posts; $i++) : ?>
                    <button
                        type="button"
                        class="munresa-promociones-dot <?php echo $i === 0 ? 'active' : ''; ?>"
                        data-slide="<?php echo esc_attr($i); ?>"
                        aria-label="Ver promoción <?php echo esc_attr($i + 1); ?>"
                    ></button>
                <?php endfor; ?>
            </div>
        <?php endif; ?>

    </section>

    <?php

    wp_reset_postdata();

    return ob_get_clean();
}

/* =========================================================
 * FRONTEND CSS
 * ========================================================= */

function munresa_promociones_frontend_styles() {

    static $loaded = false;

    if ($loaded) {
        return;
    }

    $loaded = true;

    wp_register_style('munresa-promociones-frontend', false);
    wp_enqueue_style('munresa-promociones-frontend');

    wp_add_inline_style('munresa-promociones-frontend', '
        .munresa-promociones-slider {
            width: 100%;
            max-width: 1180px;
            margin: 45px auto;
            position: relative;
            background: #ffffff;
            border-radius: 18px;
            box-shadow: 0 14px 35px rgba(0, 0, 0, 0.08);
            overflow: hidden;
        }

        .munresa-promociones-slider-viewport {
            position: relative;
            width: 100%;
            min-height: 360px;
            overflow: hidden;
        }

        .munresa-promocion-slide {
            display: none;
            grid-template-columns: minmax(0, 1.05fr) minmax(340px, 0.95fr);
            align-items: stretch;
            width: 100%;
            background: #ffffff;
            animation: munresaPromocionFade 0.55s ease-in-out;
        }

        .munresa-promocion-slide.munresa-promocion-no-image {
            grid-template-columns: 1fr;
        }

        .munresa-promocion-slide.active {
            display: grid;
        }

        .munresa-promocion-ad-image {
            width: 100%;
            height: 100%;
            min-height: 360px;
            background: #f2f2f2;
        }

        .munresa-promocion-ad-image img {
            display: block;
            width: 100%;
            height: 100%;
            min-height: 360px;
            object-fit: cover;
        }

        .munresa-promocion-ad-content {
            padding: 42px 44px;
        }

        .munresa-promocion-ad-label {
            display: inline-block;
            margin-bottom: 14px;
            padding: 8px 14px;
            background: #e30613;
            color: #ffffff;
            border-radius: 999px;
            font-size: 16px;
            line-height: 1;
            font-weight: 800;
            text-transform: uppercase;
            letter-spacing: .08em;
        }

        .munresa-promocion-ad-title {
            margin: 0 0 12px;
            color: #111827;
            font-size: clamp(30px, 3vw, 46px);
            line-height: 1.05;
            font-weight: 900;
        }

        .munresa-promocion-short {
            margin: 0 0 12px;
            color: #374151;
            font-size: 17px;
            line-height: 1.5;
        }

        .munresa-promocion-price {
            display: inline-block;
            margin: 0 0 12px;
            padding: 8px 14px;
            background: #273b91;
            color: #ffffff;
            border-radius: 8px;
            font-weight: 900;
            font-size: 18px;
        }

        .munresa-promocion-ad-text {
            color: #374151;
            font-size: 17px;
            line-height: 1.6;
        }

        .munresa-promocion-ad-text p {
            margin: 0 0 16px;
        }

        .munresa-promocion-ad-text p:last-child {
            margin-bottom: 0;
        }

        .munresa-promocion-ad-text a {
            display: inline-block;
            margin-top: 10px;
            padding: 12px 20px;
            background: #273b91;
            color: #ffffff !important;
            border-radius: 8px;
            text-decoration: none;
            font-weight: 800;
        }

        .munresa-promocion-ad-text a:hover {
            background: #e30613;
            color: #ffffff !important;
        }

        .munresa-promociones-prev,
        .munresa-promociones-next {
            position: absolute;
            top: 50%;
            transform: translateY(-50%);
            width: 42px;
            height: 42px;
            min-width: 42px;
            min-height: 42px;
            padding: 0 !important;
            margin: 0 !important;
            border: 0 !important;
            border-radius: 999px;
            background: rgba(0, 0, 0, 0.45);
            color: #ffffff !important;
            font-size: 34px;
            font-weight: 400;
            line-height: 1 !important;
            cursor: pointer;
            z-index: 8;
            transition: all 0.25s ease;
            display: flex;
            align-items: center;
            justify-content: center;
            appearance: none;
            -webkit-appearance: none;
            box-shadow: none;
        }

        .munresa-promociones-prev:hover,
        .munresa-promociones-next:hover {
            background: rgba(0, 0, 0, 0.75);
        }

        .munresa-promociones-prev {
            left: 16px;
        }

        .munresa-promociones-next {
            right: 16px;
        }

        .munresa-promociones-dots {
            position: absolute;
            left: 50%;
            bottom: 16px;
            transform: translateX(-50%);
            display: flex;
            align-items: center;
            justify-content: center;
            gap: 8px;
            z-index: 9;
        }

        .munresa-promociones-dot {
            width: 10px;
            height: 10px;
            min-width: 10px;
            min-height: 10px;
            padding: 0 !important;
            margin: 0 !important;
            border: 0 !important;
            border-radius: 999px;
            background: rgba(255, 255, 255, 0.65);
            cursor: pointer;
            transition: all 0.25s ease;
            appearance: none;
            -webkit-appearance: none;
            box-shadow: none;
            font-size: 0;
            line-height: 0;
        }

        .munresa-promociones-dot.active {
            width: 26px;
            background: #e30613;
        }

        @keyframes munresaPromocionFade {
            from {
                opacity: 0.35;
            }
            to {
                opacity: 1;
            }
        }

        @media (max-width: 900px) {
            .munresa-promocion-slide {
                grid-template-columns: 1fr;
            }

            .munresa-promocion-ad-content {
                padding: 32px 24px 56px;
            }

            .munresa-promocion-ad-image,
            .munresa-promocion-ad-image img {
                min-height: 260px;
            }

            .munresa-promociones-prev,
            .munresa-promociones-next {
                width: 36px;
                height: 36px;
                min-width: 36px;
                min-height: 36px;
                font-size: 28px;
                line-height: 1 !important;
            }

            .munresa-promociones-prev {
                left: 10px;
            }

            .munresa-promociones-next {
                right: 10px;
            }
        }

        @media (max-width: 520px) {
            .munresa-promociones-slider {
                margin: 32px auto;
                border-radius: 14px;
            }

            .munresa-promocion-ad-title {
                font-size: 28px;
            }

            .munresa-promocion-ad-text {
                font-size: 16px;
            }
        }
    ');
}

/* =========================================================
 * FRONTEND JS
 * ========================================================= */

function munresa_promociones_frontend_script() {

    static $loaded = false;

    if ($loaded) {
        return;
    }

    $loaded = true;

    wp_register_script('munresa-promociones-frontend', false, array(), null, true);
    wp_enqueue_script('munresa-promociones-frontend');

    wp_add_inline_script('munresa-promociones-frontend', '
        document.addEventListener("DOMContentLoaded", function () {
            const sliders = document.querySelectorAll(".munresa-promociones-slider");

            sliders.forEach(function(slider) {
                const slides = slider.querySelectorAll(".munresa-promocion-slide");
                const dots = slider.querySelectorAll(".munresa-promociones-dot");
                const prev = slider.querySelector(".munresa-promociones-prev");
                const next = slider.querySelector(".munresa-promociones-next");

                if (!slides.length || slides.length <= 1) {
                    return;
                }

                let current = 0;
                let timer = null;
                const interval = parseInt(slider.getAttribute("data-interval"), 10) || 6000;
                const autoplay = slider.getAttribute("data-autoplay") === "true";

                function showSlide(index) {
                    if (index < 0) {
                        index = slides.length - 1;
                    }

                    if (index >= slides.length) {
                        index = 0;
                    }

                    slides.forEach(function(slide) {
                        slide.classList.remove("active");
                    });

                    dots.forEach(function(dot) {
                        dot.classList.remove("active");
                    });

                    slides[index].classList.add("active");

                    if (dots[index]) {
                        dots[index].classList.add("active");
                    }

                    current = index;
                }

                function nextSlide() {
                    showSlide(current + 1);
                }

                function prevSlide() {
                    showSlide(current - 1);
                }

                function startTimer() {
                    if (!autoplay) {
                        return;
                    }

                    stopTimer();
                    timer = window.setInterval(nextSlide, interval);
                }

                function stopTimer() {
                    if (timer) {
                        window.clearInterval(timer);
                        timer = null;
                    }
                }

                if (next) {
                    next.addEventListener("click", function() {
                        nextSlide();
                        startTimer();
                    });
                }

                if (prev) {
                    prev.addEventListener("click", function() {
                        prevSlide();
                        startTimer();
                    });
                }

                dots.forEach(function(dot) {
                    dot.addEventListener("click", function() {
                        const index = parseInt(dot.getAttribute("data-slide"), 10);
                        showSlide(index);
                        startTimer();
                    });
                });

                slider.addEventListener("mouseenter", stopTimer);
                slider.addEventListener("mouseleave", startTimer);

                startTimer();
            });
        });
    ');
}