<?php
/**
 * Widget Elementor: Lista Cordogli
 *
 * Mostra la lista delle condoglianze pubblicate
 *
 * @package AnnunciFunebri
 * @since 4.8.0
 */

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

class ANNFU_Widget_Lista_Cordogli extends ANNFU_Widget_Base {

    public function get_name() {
        return 'annfu_lista_cordogli';
    }

    public function get_title() {
        return __('Lista Condoglianze', 'annuncifunebri-onoranza');
    }

    public function get_icon() {
        return 'eicon-posts-grid';
    }

    protected function ha_dati_widget() {
        $annuncio = $this->ottieni_dati_annuncio();
        $ha_cordogli = !empty($annuncio['cordogli']) && is_array($annuncio['cordogli']);
        $ha_partecipazioni = !empty($annuncio['partecipazioni']) && is_array($annuncio['partecipazioni']);
        return $ha_cordogli || $ha_partecipazioni;
    }

    protected function register_controls() {
        // === TAB CONTENT ===
        $this->start_controls_section(
            'sezione_contenuto',
            [
                'label' => __('Contenuto', 'annuncifunebri-onoranza'),
                'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
            ]
        );

        $this->add_control(
            'tipo_contenuto',
            [
                'label' => __('Mostra', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'default' => 'cordogli',
                'options' => [
                    'cordogli' => __('Solo Cordogli', 'annuncifunebri-onoranza'),
                    'partecipazioni' => __('Solo Partecipazioni', 'annuncifunebri-onoranza'),
                    'entrambi' => __('Cordogli e Partecipazioni', 'annuncifunebri-onoranza'),
                ],
            ]
        );

        $this->add_control(
            'titolo',
            [
                'label' => __('Titolo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::TEXT,
                'default' => 'Messaggi di condoglianze',
                'placeholder' => 'Messaggi di condoglianze',
            ]
        );

        $this->add_control(
            'display_mode_cordogli',
            [
                'label' => __('Modalità Visualizzazione Cordogli', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'default' => 'base',
                'options' => [
                    'base' => __('Lista Verticale Base', 'annuncifunebri-onoranza'),
                    'card' => __('Card con Box', 'annuncifunebri-onoranza'),
                    'timeline' => __('Timeline', 'annuncifunebri-onoranza'),
                    'compatto' => __('Compatto', 'annuncifunebri-onoranza'),
                    'masonry' => __('Masonry (Pinterest Style)', 'annuncifunebri-onoranza'),
                ],
                'condition' => [
                    'tipo_contenuto' => ['cordogli', 'entrambi'],
                ],
            ]
        );

        $this->add_control(
            'display_mode_partecipazioni',
            [
                'label' => __('Modalità Visualizzazione Partecipazioni', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'default' => 'lista',
                'options' => [
                    'lista' => __('Lista con icona', 'annuncifunebri-onoranza'),
                    'inline' => __('In linea (separati da virgola)', 'annuncifunebri-onoranza'),
                ],
                'condition' => [
                    'tipo_contenuto' => ['partecipazioni', 'entrambi'],
                ],
            ]
        );

        $this->add_control(
            'limite',
            [
                'label' => __('Numero Massimo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::NUMBER,
                'default' => 0,
                'min' => 0,
                'description' => __('0 = mostra tutti', 'annuncifunebri-onoranza'),
            ]
        );

        $this->add_control(
            'mostra_data',
            [
                'label' => __('Mostra Data', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SWITCHER,
                'label_on' => __('Sì', 'annuncifunebri-onoranza'),
                'label_off' => __('No', 'annuncifunebri-onoranza'),
                'return_value' => 'yes',
                'default' => 'yes',
                'condition' => [
                    'tipo_contenuto' => ['cordogli', 'entrambi'],
                ],
            ]
        );

        $this->add_control(
            'ordine',
            [
                'label' => __('Ordine', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'default' => 'desc',
                'options' => [
                    'desc' => __('Più recenti prima', 'annuncifunebri-onoranza'),
                    'asc' => __('Più vecchi prima', 'annuncifunebri-onoranza'),
                ],
                'condition' => [
                    'tipo_contenuto' => ['cordogli', 'entrambi'],
                ],
            ]
        );

        $this->end_controls_section();

        // === TAB STYLE ===
        $this->start_controls_section(
            'sezione_stile',
            [
                'label' => __('Stile', 'annuncifunebri-onoranza'),
                'tab' => \Elementor\Controls_Manager::TAB_STYLE,
            ]
        );

        $this->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'tipografia_titolo',
                'label' => __('Tipografia Titolo', 'annuncifunebri-onoranza'),
                'selector' => '{{WRAPPER}} .annfu-cordogli-titolo',
            ]
        );

        $this->add_control(
            'colore_titolo',
            [
                'label' => __('Colore Titolo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordogli-titolo' => 'color: {{VALUE}};',
                ],
            ]
        );

        $this->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'tipografia_nome',
                'label' => __('Tipografia Nome', 'annuncifunebri-onoranza'),
                'selector' => '{{WRAPPER}} .annfu-cordoglio-nome',
            ]
        );

        $this->add_control(
            'colore_nome',
            [
                'label' => __('Colore Nome', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordoglio-nome' => 'color: {{VALUE}};',
                ],
            ]
        );

        $this->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'tipografia_messaggio',
                'label' => __('Tipografia Messaggio', 'annuncifunebri-onoranza'),
                'selector' => '{{WRAPPER}} .annfu-cordoglio-messaggio',
            ]
        );

        $this->add_control(
            'colore_messaggio',
            [
                'label' => __('Colore Messaggio', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordoglio-messaggio' => 'color: {{VALUE}};',
                ],
            ]
        );

        $this->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'tipografia_data',
                'label' => __('Tipografia Data', 'annuncifunebri-onoranza'),
                'selector' => '{{WRAPPER}} .annfu-cordoglio-data',
            ]
        );

        $this->add_control(
            'colore_data',
            [
                'label' => __('Colore Data', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordoglio-data' => 'color: {{VALUE}};',
                ],
            ]
        );

        $this->add_control(
            'colore_sfondo_item',
            [
                'label' => __('Colore Sfondo Item', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordoglio-item' => 'background-color: {{VALUE}};',
                ],
            ]
        );

        $this->add_group_control(
            \Elementor\Group_Control_Border::get_type(),
            [
                'name' => 'bordo_item',
                'label' => __('Bordo Item', 'annuncifunebri-onoranza'),
                'selector' => '{{WRAPPER}} .annfu-cordoglio-item',
            ]
        );

        $this->add_responsive_control(
            'spaziatura_item',
            [
                'label' => __('Spaziatura Item', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::DIMENSIONS,
                'size_units' => ['px', 'em', '%'],
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordoglio-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ],
            ]
        );

        $this->add_responsive_control(
            'margine_item',
            [
                'label' => __('Margine tra Item', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SLIDER,
                'size_units' => ['px', 'em'],
                'range' => [
                    'px' => [
                        'min' => 0,
                        'max' => 100,
                    ],
                ],
                'default' => [
                    'unit' => 'px',
                    'size' => 15,
                ],
                'selectors' => [
                    '{{WRAPPER}} .annfu-cordoglio-item' => 'margin-bottom: {{SIZE}}{{UNIT}};',
                ],
            ]
        );

        $this->end_controls_section();
    }

    protected function render() {
        $annuncio = $this->ottieni_dati_annuncio();
        $settings = $this->get_settings_for_display();

        if (\Elementor\Plugin::$instance->editor->is_edit_mode() && !$this->ha_dati_widget()) {
            $this->render_placeholder_editor('eicon-posts-grid', __('Lista Condoglianze', 'annuncifunebri-onoranza'), __('Lista messaggi di cordoglio e partecipazioni', 'annuncifunebri-onoranza'));
            return;
        }

        if (!$this->ha_dati_widget()) {
            return;
        }

        $tipo_contenuto = $settings['tipo_contenuto'];
        $titolo = $settings['titolo'];
        $limite = intval($settings['limite']);
        $mostra_data = $settings['mostra_data'] === 'yes';
        $ordine = $settings['ordine'];
        $display_mode_cordogli = $settings['display_mode_cordogli'];
        $display_mode_partecipazioni = $settings['display_mode_partecipazioni'];

        ?>
        <div class="annfu-cordogli-wrapper annfu-tipo-<?php echo esc_attr($tipo_contenuto); ?>">
            <?php if (!empty($titolo)): ?>
                <h3 class="annfu-cordogli-titolo"><?php echo esc_html($titolo); ?></h3>
            <?php endif; ?>

            <?php
            // Mostra cordogli se richiesti
            if (in_array($tipo_contenuto, ['cordogli', 'entrambi']) && !empty($annuncio['cordogli'])):
                $cordogli = $annuncio['cordogli'];

                // Ordina i cordogli
                if ($ordine === 'desc') {
                    $cordogli = array_reverse($cordogli);
                }

                // Applica limite se specificato
                if ($limite > 0) {
                    $cordogli = array_slice($cordogli, 0, $limite);
                }

                $this->render_cordogli($cordogli, $display_mode_cordogli, $mostra_data);
            endif;

            // Mostra partecipazioni se richieste
            if (in_array($tipo_contenuto, ['partecipazioni', 'entrambi']) && !empty($annuncio['partecipazioni'])):
                $partecipazioni = $annuncio['partecipazioni'];

                // Applica limite se specificato per partecipazioni
                if ($limite > 0) {
                    $partecipazioni = array_slice($partecipazioni, 0, $limite);
                }

                $this->render_partecipazioni($partecipazioni, $display_mode_partecipazioni);
            endif;
            ?>
        </div>
        <?php
    }

    private function render_cordogli($cordogli, $display_mode, $mostra_data) {
        $wrapper_class = 'annfu-cordogli-lista annfu-display-' . $display_mode;
        ?>
        <div class="<?php echo esc_attr($wrapper_class); ?>">
            <?php foreach ($cordogli as $index => $cordoglio): ?>
                <?php
                switch ($display_mode):
                    case 'card':
                        $this->render_cordoglio_card($cordoglio, $mostra_data);
                        break;
                    case 'timeline':
                        $this->render_cordoglio_timeline($cordoglio, $mostra_data, $index);
                        break;
                    case 'compatto':
                        $this->render_cordoglio_compatto($cordoglio, $mostra_data);
                        break;
                    case 'masonry':
                        $this->render_cordoglio_masonry($cordoglio, $mostra_data);
                        break;
                    case 'base':
                    default:
                        $this->render_cordoglio_base($cordoglio, $mostra_data);
                        break;
                endswitch;
                ?>
            <?php endforeach; ?>
        </div>
        <?php
    }

    private function render_cordoglio_base($cordoglio, $mostra_data) {
        ?>
        <div class="annfu-cordoglio-item">
            <div class="annfu-cordoglio-header">
                <span class="annfu-cordoglio-nome">
                    <?php echo esc_html($cordoglio['utente']); ?>
                </span>
                <?php if ($mostra_data && !empty($cordoglio['data'])): ?>
                    <span class="annfu-cordoglio-data">
                        <?php echo esc_html(date_i18n(get_option('date_format'), strtotime($cordoglio['data']))); ?>
                    </span>
                <?php endif; ?>
            </div>
            <div class="annfu-cordoglio-messaggio">
                <?php echo wp_kses_post($cordoglio['testo'] ?? ''); ?>
            </div>
        </div>
        <?php
    }

    private function render_cordoglio_card($cordoglio, $mostra_data) {
        ?>
        <div class="annfu-cordoglio-card">
            <div class="annfu-card-inner">
                <div class="annfu-card-header">
                    <span class="annfu-cordoglio-nome">
                        <?php echo esc_html($cordoglio['utente']); ?>
                    </span>
                    <?php if ($mostra_data && !empty($cordoglio['data'])): ?>
                        <span class="annfu-cordoglio-data">
                            <?php echo esc_html(date_i18n(get_option('date_format'), strtotime($cordoglio['data']))); ?>
                        </span>
                    <?php endif; ?>
                </div>
                <div class="annfu-card-body">
                    <div class="annfu-cordoglio-messaggio">
                        <?php echo wp_kses_post($cordoglio['testo'] ?? ''); ?>
                    </div>
                </div>
            </div>
        </div>
        <?php
    }

    private function render_cordoglio_timeline($cordoglio, $mostra_data, $index) {
        $side_class = $index % 2 === 0 ? 'annfu-timeline-left' : 'annfu-timeline-right';
        ?>
        <div class="annfu-cordoglio-timeline <?php echo esc_attr($side_class); ?>">
            <div class="annfu-timeline-marker"></div>
            <div class="annfu-timeline-content">
                <div class="annfu-timeline-header">
                    <span class="annfu-cordoglio-nome">
                        <?php echo esc_html($cordoglio['utente']); ?>
                    </span>
                    <?php if ($mostra_data && !empty($cordoglio['data'])): ?>
                        <span class="annfu-cordoglio-data">
                            <?php echo esc_html(date_i18n(get_option('date_format'), strtotime($cordoglio['data']))); ?>
                        </span>
                    <?php endif; ?>
                </div>
                <div class="annfu-timeline-body">
                    <?php echo wp_kses_post($cordoglio['testo'] ?? ''); ?>
                </div>
            </div>
        </div>
        <?php
    }

    private function render_cordoglio_compatto($cordoglio, $mostra_data) {
        ?>
        <div class="annfu-cordoglio-compatto">
            <span class="annfu-cordoglio-nome"><?php echo esc_html($cordoglio['utente']); ?></span>
            <?php if ($mostra_data && !empty($cordoglio['data'])): ?>
                <span class="annfu-cordoglio-data">(<?php echo esc_html(date_i18n(get_option('date_format'), strtotime($cordoglio['data']))); ?>)</span>
            <?php endif; ?>
            <span class="annfu-cordoglio-separatore">:</span>
            <span class="annfu-cordoglio-messaggio"><?php echo wp_kses_post($cordoglio['testo'] ?? ''); ?></span>
        </div>
        <?php
    }

    private function render_cordoglio_masonry($cordoglio, $mostra_data) {
        ?>
        <div class="annfu-cordoglio-masonry-item">
            <div class="annfu-masonry-content">
                <div class="annfu-masonry-header">
                    <span class="annfu-cordoglio-nome"><?php echo esc_html($cordoglio['utente']); ?></span>
                    <?php if ($mostra_data && !empty($cordoglio['data'])): ?>
                        <span class="annfu-cordoglio-data">
                            <?php echo esc_html(date_i18n(get_option('date_format'), strtotime($cordoglio['data']))); ?>
                        </span>
                    <?php endif; ?>
                </div>
                <div class="annfu-masonry-body">
                    <p class="annfu-cordoglio-messaggio"><?php echo wp_kses_post($cordoglio['testo'] ?? ''); ?></p>
                </div>
            </div>
        </div>
        <?php
    }

    private function render_partecipazioni($partecipazioni, $display_mode) {
        $wrapper_class = 'annfu-partecipazioni-wrapper annfu-partecipazioni-' . $display_mode;
        ?>
        <div class="<?php echo esc_attr($wrapper_class); ?>">
            <h4 class="annfu-partecipazioni-subtitle"><?php echo esc_html__('Partecipano al lutto', 'annuncifunebri-onoranza'); ?></h4>

            <?php if ($display_mode === 'lista'): ?>
                <ul class="annfu-partecipazioni-lista">
                    <?php foreach ($partecipazioni as $partecipazione): ?>
                        <li class="annfu-partecipazione-item">
                            <span class="annfu-partecipazione-icona">•</span>
                            <span class="annfu-partecipazione-nome"><?php echo esc_html($partecipazione['utente']) ?></span>
                        </li>
                    <?php endforeach; ?>
                </ul>
            <?php else: ?>
                <div class="annfu-partecipazioni-inline">
                    <?php
                    $nomi = array_map(function($p) {
                        return '<span class="annfu-partecipazione-nome">' . esc_html($p['nome']) . '</span>';
                    }, $partecipazioni);
                    echo wp_kses(implode(', ', $nomi), ['span' => ['class' => true]]);
                    ?>
                </div>
            <?php endif; ?>
        </div>
        <?php
    }
}
