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

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

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

add_action('admin_menu', 'munresa_novedades_register_admin_page', 30);

function munresa_novedades_register_admin_page() {

    add_menu_page(
        'Novedades',
        'Novedades',
        'manage_munresa_promos',
        'munresa-novedades',
        'munresa_novedades_render_admin_page',
        'dashicons-megaphone',
        26
    );
}

/*
 * Opcional: ocultar el 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_novedades_hide_native_cpt_menu', 9999);

function munresa_novedades_hide_native_cpt_menu() {
    remove_menu_page('edit.php?post_type=munresa_novedad');
}

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

function munresa_novedades_render_admin_page() {

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

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

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

    $form_data = munresa_novedades_get_form_data($editing_post);

    wp_enqueue_media();
    wp_enqueue_editor();

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

    <?php munresa_novedades_print_notices(); ?>

    <div class="munresa-box munresa-box-form">
        <div class="munresa-box-header">
            <h2><?php echo $editing_post ? 'Editar novedad' : 'Agregar nueva novedad'; ?></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-novedades')); ?>">

                <?php wp_nonce_field('munresa_novedad_save', 'munresa_novedad_nonce'); ?>
                <input type="hidden" name="munresa_novedad_action" value="save">

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

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

                    <div class="munresa-admin-field">
                        <label for="munresa_novedad_fecha_final">Fecha final</label>
                        <input type="date" id="munresa_novedad_fecha_final" name="munresa_novedad_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_novedad_imagen">Imagen</label>
                        <input type="file" id="munresa_novedad_imagen" name="munresa_novedad_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_novedad_pagina" value="munresa" <?php checked($form_data['pagina'], 'munresa'); ?>>
                                MUNRESA
                            </label>

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

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

                <div class="munresa-editor-wrap">
                    <label for="munresa_novedad_contenido">Contenido</label>
                    <?php
                    wp_editor(
                        $form_data['contenido'],
                        'munresa_novedad_contenido',
                        array(
                            'textarea_name' => 'munresa_novedad_contenido',
                            '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-novedades')); ?>">
                            Crear nueva
                        </a>
                    <?php endif; ?>
                </div>

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

    <?php munresa_novedades_render_list(); ?>

</div>
    <?php
}

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

function munresa_novedades_get_form_data($post = null) {

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

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

    $data['titulo']       = $post->post_title;
    $data['contenido']    = $post->post_content;
    $data['fecha_inicio'] = get_post_meta($post->ID, '_munresa_novedad_fecha_inicio', true);
    $data['fecha_final']  = get_post_meta($post->ID, '_munresa_novedad_fecha_final', true);
    $data['pagina']       = get_post_meta($post->ID, '_munresa_novedad_pagina', true);
    $data['image_id']     = absint(get_post_meta($post->ID, '_munresa_novedad_image_id', true));

    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_novedades_admin_init_actions');

function munresa_novedades_admin_init_actions() {

    if (!is_admin()) {
        return;
    }

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

    /*
     * Solo procesar acciones dentro de la pantalla personalizada de Novedades.
     */
    if ($page !== 'munresa-novedades') {
        return;
    }

    munresa_novedades_handle_actions();
}

function munresa_novedades_handle_actions() {

    if (isset($_POST['munresa_novedad_action']) && $_POST['munresa_novedad_action'] === 'save') {
        munresa_novedades_handle_save();
    }

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

function munresa_novedades_handle_save() {

    if (
        !isset($_POST['munresa_novedad_nonce']) ||
        !wp_verify_nonce(
            sanitize_text_field(wp_unslash($_POST['munresa_novedad_nonce'])),
            'munresa_novedad_save'
        )
    ) {
        munresa_novedades_redirect_with_notice('error_nonce');
    }

    if (!current_user_can('edit_munresa_novedades') && !current_user_can('manage_munresa_promos')) {
        munresa_novedades_redirect_with_notice('error_permisos');
    }

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

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

    $contenido = isset($_POST['munresa_novedad_contenido'])
        ? wp_kses_post(wp_unslash($_POST['munresa_novedad_contenido']))
        : '';

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

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

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

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

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

    $post_data = array(
        'post_type'    => 'munresa_novedad',
        'post_status'  => 'publish',
        'post_title'   => $titulo,
        'post_content' => $contenido,
    );

    if ($post_id > 0 && get_post_type($post_id) === 'munresa_novedad') {
        if (!current_user_can('edit_post', $post_id)) {
            munresa_novedades_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_novedades_redirect_with_notice('error_guardar');
    }

    update_post_meta($saved_id, '_munresa_novedad_fecha_inicio', $fecha_inicio);
    update_post_meta($saved_id, '_munresa_novedad_fecha_final', $fecha_final);
    update_post_meta($saved_id, '_munresa_novedad_pagina', $pagina);

    munresa_novedades_handle_image_upload($saved_id);

    munresa_novedades_redirect_with_notice('guardado');
}

function munresa_novedades_handle_image_upload($post_id) {

    if (
        empty($_FILES['munresa_novedad_imagen']) ||
        empty($_FILES['munresa_novedad_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_novedad_imagen', $post_id);

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

    update_post_meta($post_id, '_munresa_novedad_image_id', absint($attachment_id));
}

function munresa_novedades_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_novedad') {
        munresa_novedades_redirect_with_notice('error_eliminar');
    }

    if (!wp_verify_nonce($nonce, 'munresa_novedad_delete_' . $post_id)) {
        munresa_novedades_redirect_with_notice('error_nonce');
    }

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

    wp_trash_post($post_id);

    munresa_novedades_redirect_with_notice('eliminado');
}

function munresa_novedades_redirect_with_notice($notice) {

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

    wp_safe_redirect($url);
    exit;
}

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

function munresa_novedades_print_notices() {

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

    if (!$msg) {
        return;
    }

    $messages = array(
        'guardado'       => array('success', 'La novedad fue guardada correctamente.'),
        'eliminado'      => array('success', 'La novedad 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 novedad.'),
        'error_eliminar' => array('error', 'No se pudo eliminar la novedad.'),
    );

    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 NOVEDADES REGISTRADAS
 * ========================================================= */

function munresa_novedades_render_list() {

    $query = new WP_Query(array(
        'post_type'      => 'munresa_novedad',
        '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>Novedades registradas</h2>
        </div>
        <div class="munresa-box-body">

        <?php if (!$query->have_posts()) : ?>
            <p>No hay novedades registradas todavía.</p>
        <?php else : ?>

            <table class="widefat striped munresa-table">
                <thead>
                    <tr>
                        <th>Título</th>
                        <th>Página</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_novedad_pagina', true);
                        $inicio = get_post_meta($post_id, '_munresa_novedad_fecha_inicio', true);
                        $final  = get_post_meta($post_id, '_munresa_novedad_fecha_final', true);

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

                        $delete_url = wp_nonce_url(
                            add_query_arg(
                                array(
                                    'page'   => 'munresa-novedades',
                                    'accion' => 'eliminar',
                                    'id'     => $post_id,
                                ),
                                admin_url('admin.php')
                            ),
                            'munresa_novedad_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
                                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 novedad?');"
                                >
                                    Eliminar
                                </a>
                            </td>
                        </tr>

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

        <?php endif; ?>
        </div>
    </div>

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

/* =========================================================
 * ADMIN CSS MINIMAL
 * Usa estilos nativos de WordPress para no saturar código.
 * ========================================================= */

add_action('admin_enqueue_scripts', 'munresa_novedades_admin_styles');

function munresa_novedades_admin_styles($hook) {

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

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

wp_add_inline_style('munresa-novedades-admin', '
    .munresa-novedades-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 > 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_novedad_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_novedades', 'munresa_novedades_shortcode');

function munresa_novedades_shortcode($atts) {

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

    $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_novedad',
        'post_status'    => 'publish',
        'posts_per_page' => $cantidad,
        'orderby'        => 'date',
        'order'          => 'DESC',
        'meta_query'     => array(
            'relation' => 'AND',

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

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

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

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

    munresa_novedades_frontend_styles();

    $extra_class = !empty($atts['clase']) ? sanitize_html_class($atts['clase']) : '';

munresa_novedades_frontend_styles();
munresa_novedades_frontend_script();

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

ob_start();
?>

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

        <?php
        $index = 0;
        while ($query->have_posts()) :
            $query->the_post();

            $post_id = get_the_ID();

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

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

            <article class="munresa-novedad-slide <?php echo $index === 0 ? 'active' : ''; ?>" data-slide="<?php echo esc_attr($index); ?>">

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

                <div class="munresa-novedad-ad-content">
                    <span class="munresa-novedad-ad-label">Novedades</span>

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

                    <div class="munresa-novedad-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-novedades-prev" aria-label="Novedad anterior">
            ‹
        </button>

        <button type="button" class="munresa-novedades-next" aria-label="Siguiente novedad">
            ›
        </button>

        <div class="munresa-novedades-dots" aria-label="Indicadores de novedades">
            <?php for ($i = 0; $i < $total_posts; $i++) : ?>
                <button
                    type="button"
                    class="munresa-novedades-dot <?php echo $i === 0 ? 'active' : ''; ?>"
                    data-slide="<?php echo esc_attr($i); ?>"
                    aria-label="Ver novedad <?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_novedades_frontend_styles() {

    static $loaded = false;

    if ($loaded) {
        return;
    }

    $loaded = true;

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

    wp_add_inline_style('munresa-novedades-frontend', '
        .munresa-novedades-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-novedades-slider-viewport {
            position: relative;
            width: 100%;
            min-height: 360px;
            overflow: hidden;
        }

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

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

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

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

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

        .munresa-novedad-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-novedad-ad-title {
            margin: 0 0 16px;
            color: #111827;
            font-size: clamp(30px, 3vw, 46px);
            line-height: 1.05;
            font-weight: 900;
        }

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

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

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

        .munresa-novedad-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-novedad-ad-text a:hover {
            background: #e30613;
            color: #ffffff !important;
        }

        .munresa-novedades-compensadores .munresa-novedad-ad-label {
            background: #111827;
        }

        .munresa-novedades-compensadores .munresa-novedad-ad-text a {
            background: #e30613;
        }

        .munresa-novedades-compensadores .munresa-novedad-ad-text a:hover {
            background: #111827;
        }

        .munresa-novedades-prev,
        .munresa-novedades-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-novedades-prev:hover,
        .munresa-novedades-next:hover {
            background: rgba(0, 0, 0, 0.75);
        }

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

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

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

        .munresa-novedades-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-novedades-dot.active {
            width: 26px;
            background: #e30613;
        }

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

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

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

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

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

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

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

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

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

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

function munresa_novedades_frontend_script() {

    static $loaded = false;

    if ($loaded) {
        return;
    }

    $loaded = true;

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

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

            sliders.forEach(function(slider) {
                const slides = slider.querySelectorAll(".munresa-novedad-slide");
                const dots = slider.querySelectorAll(".munresa-novedades-dot");
                const prev = slider.querySelector(".munresa-novedades-prev");
                const next = slider.querySelector(".munresa-novedades-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();
            });
        });
    ');
}