<?php
/**
 * Gestore Template Elementor
 *
 * Gestisce la selezione e l'associazione dei template Elementor per i necrologi.
 * Implementa un sistema di priorità: specifico > gruppo > default > fallback PHP
 *
 * @package AnnunciFunebri
 * @since 4.7.6
 */

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

class ANNFU_Gestore_Template
{

    /**
     * Nome del Custom Post Type per i template
     */
    const TIPO_POST_TEMPLATE = 'annfu_el_template';

    /**
     * Meta key per il tipo di pagina del template
     */
    const META_TIPO_PAGINA = '_annfu_tipo_pagina';

    /**
     * Registra il Custom Post Type per i template Elementor
     *
     * @return void
     */
    public static function registra_cpt_template()
    {
        $etichette = array(
            'name' => __('Template Personalizzati', 'annuncifunebri-onoranza'),
            'singular_name' => __('Template Personalizzato', 'annuncifunebri-onoranza'),
            'add_new' => __('Aggiungi Nuovo', 'annuncifunebri-onoranza'),
            'add_new_item' => __('Aggiungi Nuovo Template', 'annuncifunebri-onoranza'),
            'edit_item' => __('Modifica Template', 'annuncifunebri-onoranza'),
            'new_item' => __('Nuovo Template', 'annuncifunebri-onoranza'),
            'view_item' => __('Visualizza Template', 'annuncifunebri-onoranza'),
            'search_items' => __('Cerca Template', 'annuncifunebri-onoranza'),
            'not_found' => __('Nessun template trovato', 'annuncifunebri-onoranza'),
            'not_found_in_trash' => __('Nessun template nel cestino', 'annuncifunebri-onoranza'),
            'menu_name' => __('Template', 'annuncifunebri-onoranza') . ' <span class="awaiting-mod">beta</span>',
        );

        $argomenti = array(
            'labels' => $etichette,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true,
            'show_in_menu' => 'af-plugin',
            'show_in_nav_menus' => false,
            'menu_position' => 1,
            'supports' => array('title', 'editor', 'elementor', 'thumbnail'),
            'capability_type' => 'page',
            'has_archive' => false,
            'rewrite' => array('slug' => 'template-necrologio', 'with_front' => false),
            'query_var' => true,
            'can_export' => true,
            'exclude_from_search' => true,
        );

        register_post_type(self::TIPO_POST_TEMPLATE, $argomenti);
    }

    /**
     * Ottiene l'ID del template Elementor per un annuncio specifico
     *
     * NOTA: Questo metodo è mantenuto per retrocompatibilità ma non viene più utilizzato.
     * Il sistema ora usa template selezionati manualmente nelle impostazioni per tipo di pagina.
     *
     * @param array $dati_annuncio Dati del necrologio
     * @return int|false ID del template o false
     */
    public static function ottieni_id_template_per_annuncio($dati_annuncio)
    {
        // Metodo deprecato - usa template da impostazioni
        return false;
    }

    /**
     * Ottiene l'ID del template Elementor per un ID onoranza
     *
     * NOTA: Questo metodo è mantenuto per retrocompatibilità ma non viene più utilizzato.
     * Il sistema ora usa template selezionati manualmente nelle impostazioni per tipo di pagina.
     *
     * @param int $id_onoranza ID dell'onoranza funebre
     * @return int|false ID del template o false
     */
    public static function ottieni_id_template_per_onoranza($id_onoranza)
    {
        // Metodo deprecato - usa template da impostazioni
        return false;
    }

    /**
     * Aggiunge meta box per tipo pagina template
     *
     * @return void
     */
    public static function aggiungi_meta_box()
    {
        add_meta_box(
            'annfu_tipo_pagina_template',
            __('Tipo Pagina', 'annuncifunebri-onoranza'),
            array(__CLASS__, 'render_meta_box'),
            self::TIPO_POST_TEMPLATE,
            'side',
            'high'
        );
    }

    /**
     * Render della meta box per tipo pagina
     *
     * @param WP_Post $post Post corrente
     * @return void
     */
    public static function render_meta_box($post)
    {
        wp_nonce_field('annfu_salva_tipo_pagina', 'annfu_tipo_pagina_nonce');

        $tipo_pagina = get_post_meta($post->ID, self::META_TIPO_PAGINA, true);

        if (empty($tipo_pagina)) {
            $tipo_pagina = '';
        }
        ?>
        <div class="annfu-tipo-pagina">
            <p>
                <label
                    for="annfu_tipo_pagina"><strong><?php esc_html_e('Tipo di pagina:', 'annuncifunebri-onoranza'); ?></strong></label>
                <select name="annfu_tipo_pagina" id="annfu_tipo_pagina" class="widefat" style="margin-top: 8px;">
                    <option value=""><?php esc_html_e('Nessuna (non assegnato)', 'annuncifunebri-onoranza'); ?></option>
                    <option value="lista_annunci" <?php selected($tipo_pagina, 'lista_annunci'); ?>>
                        <?php esc_html_e('Lista Annunci', 'annuncifunebri-onoranza'); ?></option>
                    <option value="dettaglio_annuncio" <?php selected($tipo_pagina, 'dettaglio_annuncio'); ?>>
                        <?php esc_html_e('Dettaglio Annuncio', 'annuncifunebri-onoranza'); ?></option>
                    <option value="diretta_streaming" <?php selected($tipo_pagina, 'diretta_streaming'); ?>>
                        <?php esc_html_e('Diretta Streaming', 'annuncifunebri-onoranza'); ?></option>
                </select>
            </p>
            <p style="margin-top: 12px;">
                <small style="color: #666;">
                    <?php esc_html_e('Seleziona per quale tipo di pagina vuoi utilizzare questo template. Puoi poi selezionarlo dalle impostazioni del plugin.', 'annuncifunebri-onoranza'); ?>
                </small>
            </p>

            <style>
                .annfu-tipo-pagina p {
                    margin: 10px 0;
                }
            </style>
        </div>
        <?php
    }

    /**
     * Salva i dati della meta box
     *
     * @param int $post_id ID del post
     * @return void
     */
    public static function salva_meta_box($post_id)
    {
        // Verifica nonce
        if (!isset($_POST['annfu_tipo_pagina_nonce'])) {
            return;
        }

        if (!wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['annfu_tipo_pagina_nonce'])), 'annfu_salva_tipo_pagina')) {
            return;
        }

        // Verifica autosave
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return;
        }

        // Verifica permessi
        if (!current_user_can('edit_page', $post_id)) {
            return;
        }

        // Salva tipo pagina
        if (isset($_POST['annfu_tipo_pagina'])) {
            $tipo_pagina = sanitize_text_field(wp_unslash($_POST['annfu_tipo_pagina']));
            update_post_meta($post_id, self::META_TIPO_PAGINA, $tipo_pagina);
        }
    }

    /**
     * Aggiunge colonne personalizzate nella lista template
     *
     * @param array $colonne Colonne esistenti
     * @return array Colonne modificate
     */
    public static function aggiungi_colonne_lista($colonne)
    {
        // Approccio semplice: rimuovi 'date' e ricostruisci l'array
        $date_column = isset($colonne['date']) ? $colonne['date'] : null;
        unset($colonne['date']);
        unset($colonne['tipo_pagina']); // Rimuovi se esiste già

        // Aggiungi tipo_pagina
        $colonne['tipo_pagina'] = __('Tipo Pagina', 'annuncifunebri-onoranza');

        // Ri-aggiungi date alla fine se esisteva
        if ($date_column !== null) {
            $colonne['date'] = $date_column;
        }

        return $colonne;
    }

    /**
     * Render delle colonne personalizzate
     *
     * @param string $colonna Nome della colonna
     * @param int $post_id ID del post
     * @return void
     */
    public static function render_colonne_lista($colonna, $post_id)
    {
        // Usa una variabile statica per prevenire doppie chiamate
        static $rendered = array();

        if ($colonna !== 'tipo_pagina') {
            return;
        }

        // Crea una chiave unica per questo rendering
        $key = $post_id . '_' . $colonna;

        // Se già renderizzato, esci
        if (isset($rendered[$key])) {
            return;
        }

        // Marca come renderizzato
        $rendered[$key] = true;

        $tipo_pagina = get_post_meta($post_id, self::META_TIPO_PAGINA, true);

        // Output con data attribute per quick edit
        echo '<div data-tipo-pagina="' . esc_attr($tipo_pagina) . '">';

        switch ($tipo_pagina) {
            case 'lista_annunci':
                echo '<span style="background: #2196f3; color: white; padding: 3px 8px; border-radius: 3px; font-size: 11px; font-weight: bold;">' . esc_html__('LISTA ANNUNCI', 'annuncifunebri-onoranza') . '</span>';
                break;
            case 'dettaglio_annuncio':
                echo '<span style="background: #ff9800; color: white; padding: 3px 8px; border-radius: 3px; font-size: 11px; font-weight: bold;">' . esc_html__('DETTAGLIO ANNUNCIO', 'annuncifunebri-onoranza') . '</span>';
                break;
            case 'diretta_streaming':
                echo '<span style="background: #e91e63; color: white; padding: 3px 8px; border-radius: 3px; font-size: 11px; font-weight: bold;">' . esc_html__('DIRETTA STREAMING', 'annuncifunebri-onoranza') . '</span>';
                break;
            default:
                echo '<span style="color: #999;">' . esc_html__('Non assegnato', 'annuncifunebri-onoranza') . '</span>';
        }

        echo '</div>';
    }

    /**
     * Aggiunge campo custom alla quick edit
     *
     * @param string $column_name Nome della colonna
     * @param string $post_type Tipo di post
     * @return void
     */
    public static function aggiungi_quick_edit($column_name, $post_type)
    {
        if ($post_type !== self::TIPO_POST_TEMPLATE || $column_name !== 'tipo_pagina') {
            return;
        }
        ?>
        <fieldset class="inline-edit-col-right">
            <div class="inline-edit-col">
                <label>
                    <span class="title"><?php esc_html_e('Tipo Pagina', 'annuncifunebri-onoranza'); ?></span>
                    <span class="input-text-wrap">
                        <select name="annfu_tipo_pagina_quick" class="annfu-quick-edit-tipo-pagina">
                            <option value=""><?php esc_html_e('Nessuna (non assegnato)', 'annuncifunebri-onoranza'); ?></option>
                            <option value="lista_annunci"><?php esc_html_e('Lista Annunci', 'annuncifunebri-onoranza'); ?>
                            </option>
                            <option value="dettaglio_annuncio">
                                <?php esc_html_e('Dettaglio Annuncio', 'annuncifunebri-onoranza'); ?></option>
                            <option value="diretta_streaming">
                                <?php esc_html_e('Diretta Streaming', 'annuncifunebri-onoranza'); ?></option>
                        </select>
                    </span>
                </label>
            </div>
        </fieldset>
        <?php
    }

    /**
     * Salva il tipo pagina da quick edit
     *
     * @param int $post_id ID del post
     * @return void
     */
    public static function salva_quick_edit($post_id)
    {
        // Verifica se è un quick edit
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return;
        }

        // Verifica il tipo di post
        if (get_post_type($post_id) !== self::TIPO_POST_TEMPLATE) {
            return;
        }

        // Verifica i permessi
        if (!current_user_can('edit_post', $post_id)) {
            return;
        }

        // Verifica nonce della Quick Edit
        if (!isset($_POST['_inline_edit']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['_inline_edit'])), 'inlineeditnonce')) {
            return;
        }

        // Salva il tipo pagina
        if (isset($_POST['annfu_tipo_pagina_quick'])) {
            $tipo_pagina = sanitize_text_field(wp_unslash($_POST['annfu_tipo_pagina_quick']));
            update_post_meta($post_id, self::META_TIPO_PAGINA, $tipo_pagina);
        }
    }

    /**
     * JavaScript per popolare quick edit con valore corrente
     *
     * @return void
     */
    public static function quick_edit_javascript()
    {
        global $current_screen;

        if ($current_screen->post_type !== self::TIPO_POST_TEMPLATE) {
            return;
        }
        ?>
        <script type="text/javascript">
            jQuery(function ($) {
                // Quando si clicca su "Quick Edit"
                var $inline_editor = inlineEditPost.edit;
                inlineEditPost.edit = function (id) {
                    // Chiama la funzione originale
                    $inline_editor.apply(this, arguments);

                    var post_id = 0;
                    if (typeof (id) === 'object') {
                        post_id = parseInt(this.getId(id));
                    }

                    if (post_id > 0) {
                        // Trova la riga del post
                        var $row = $('#post-' + post_id);

                        // Leggi il valore corrente dal data attribute
                        var tipo_pagina = $row.find('[data-tipo-pagina]').data('tipo-pagina');

                        // Imposta il valore nella select di quick edit
                        var $edit_row = $('#edit-' + post_id);
                        $edit_row.find('select.annfu-quick-edit-tipo-pagina').val(tipo_pagina);
                    }
                };
            });
        </script>
        <?php
    }
}
