<?php
/**
 * Widget Elementor: Tabs Interazioni
 *
 * Sistema di tab semplice per cordogli, fiori, foto e donazioni.
 * Non richiede Nested Elements, usa Bootstrap tabs.
 *
 * @package AnnunciFunebri
 * @since 4.8.0
 */

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

class ANNFU_Widget_Tabs_Interazioni extends ANNFU_Widget_Base {

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

    public function get_title() {
        return __('Tabs Interazioni', 'annuncifunebri-onoranza');
    }

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

    public function get_keywords() {
        return ['tabs', 'cordoglio', 'fiori', 'foto', 'donazioni', 'form'];
    }

    protected function ha_dati_widget() {
        return true; // Sempre disponibile
    }

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

        $this->add_control(
            'info_visibilita',
            [
                'type' => \Elementor\Controls_Manager::RAW_HTML,
                'raw' => '<div style="background: #e7f3ff; padding: 12px; border-radius: 5px; border-left: 4px solid #0073aa; font-size: 12px;">
                    <strong>Visibilità Automatica</strong><br>
                    I tab vengono mostrati/nascosti automaticamente in base ai dati dell\'annuncio.
                </div>',
            ]
        );

        $this->add_control(
            'mostra_cordogli',
            [
                'label' => __('Tab Cordogli', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SWITCHER,
                'label_on' => __('Sì', 'annuncifunebri-onoranza'),
                'label_off' => __('No', 'annuncifunebri-onoranza'),
                'return_value' => 'yes',
                'default' => 'yes',
                'description' => __('Nascosto automaticamente se nascondiCordogli=true', 'annuncifunebri-onoranza'),
            ]
        );

        $this->add_control(
            'titolo_cordogli',
            [
                'label' => __('Titolo Tab Cordogli', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::TEXT,
                'default' => 'Lascia un cordoglio',
                'condition' => ['mostra_cordogli' => 'yes'],
            ]
        );

        $this->add_control(
            'mostra_foto',
            [
                'label' => __('Tab Foto', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SWITCHER,
                'label_on' => __('Sì', 'annuncifunebri-onoranza'),
                'label_off' => __('No', 'annuncifunebri-onoranza'),
                'return_value' => 'yes',
                'default' => 'yes',
                'separator' => 'before',
                'description' => __('Nascosto automaticamente se abilitatoFotoCordogli=false', 'annuncifunebri-onoranza'),
            ]
        );

        $this->add_control(
            'titolo_foto',
            [
                'label' => __('Titolo Tab Foto', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::TEXT,
                'default' => 'Invia una foto',
                'condition' => ['mostra_foto' => 'yes'],
            ]
        );

        $this->add_control(
            'mostra_fiori',
            [
                'label' => __('Tab Fiori', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SWITCHER,
                'label_on' => __('Sì', 'annuncifunebri-onoranza'),
                'label_off' => __('No', 'annuncifunebri-onoranza'),
                'return_value' => 'yes',
                'default' => 'yes',
                'separator' => 'before',
                'description' => __('Nascosto automaticamente se abilitatoFiori=false', 'annuncifunebri-onoranza'),
            ]
        );

        $this->add_control(
            'titolo_fiori',
            [
                'label' => __('Titolo Tab Fiori', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::TEXT,
                'default' => 'Acquista dei fiori',
                'condition' => ['mostra_fiori' => 'yes'],
            ]
        );

        $this->add_control(
            'mostra_donazioni',
            [
                'label' => __('Tab Donazioni', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SWITCHER,
                'label_on' => __('Sì', 'annuncifunebri-onoranza'),
                'label_off' => __('No', 'annuncifunebri-onoranza'),
                'return_value' => 'yes',
                'default' => 'yes',
                'separator' => 'before',
                'description' => __('Nascosto automaticamente se opereBene è vuoto', 'annuncifunebri-onoranza'),
            ]
        );

        $this->add_control(
            'titolo_donazioni',
            [
                'label' => __('Titolo Tab Donazioni', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::TEXT,
                'default' => 'Donazioni',
                'condition' => ['mostra_donazioni' => 'yes'],
            ]
        );

        $this->end_controls_section();

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

        $this->add_group_control(
            \Elementor\Group_Control_Typography::get_type(),
            [
                'name' => 'tipografia_tab',
                'label' => __('Tipografia', 'annuncifunebri-onoranza'),
                'selector' => '{{WRAPPER}} .annfu-tabs-nav a',
            ]
        );

        $this->add_control(
            'colore_tab',
            [
                'label' => __('Colore Testo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-tabs-nav a' => 'color: {{VALUE}};',
                ],
            ]
        );

        $this->add_control(
            'colore_tab_attivo',
            [
                'label' => __('Colore Testo Attivo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-tabs-nav a.active' => 'color: {{VALUE}};',
                ],
            ]
        );

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

        $this->add_control(
            'colore_sfondo_tab_attivo',
            [
                'label' => __('Colore Sfondo Attivo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-tabs-nav a.active' => 'background-color: {{VALUE}};',
                ],
            ]
        );

        $this->add_control(
            'colore_bordo_tab',
            [
                'label' => __('Colore Bordo Attivo', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::COLOR,
                'selectors' => [
                    '{{WRAPPER}} .annfu-tabs-nav a.active' => 'border-bottom-color: {{VALUE}};',
                ],
            ]
        );

        $this->end_controls_section();
    }

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

        if (\Elementor\Plugin::$instance->editor->is_edit_mode() && empty($dati)) {
            $this->render_placeholder_editor('eicon-tabs', __('Tabs Interazioni', 'annuncifunebri-onoranza'), __('Configura i tab per cordogli, fiori, foto e donazioni', 'annuncifunebri-onoranza'));
            return;
        }

        if (empty($dati) || !is_array($dati)) {
            return;
        }

        // Prepara i dati
        if (array_key_exists('metaData', $dati) && array_key_exists('data', $dati)) {
            $metaData = $dati['metaData'];
            $annuncio = $dati['data'];
        } else {
            $annuncio = $dati;
            $metaData = ['token' => ''];
        }

        // Determina quali tab mostrare
        $tabs = [];

        // Tab Cordogli
        if ($settings['mostra_cordogli'] === 'yes') {
            $visibile = empty($annuncio['nascondiCordogli']) || $annuncio['nascondiCordogli'] != 1;
            if ($visibile) {
                $tabs['cordogli'] = [
                    'titolo' => $settings['titolo_cordogli'] ?: 'Lascia un cordoglio',
                    'id' => 'annfu_tab_cordogli',
                ];
            }
        }

        // Tab Foto
        if ($settings['mostra_foto'] === 'yes') {
            $visibile = !empty($annuncio['abilitatoFotoCordogli']) && $annuncio['abilitatoFotoCordogli'] == 1;
            if ($visibile) {
                $tabs['foto'] = [
                    'titolo' => $settings['titolo_foto'] ?: 'Invia una foto',
                    'id' => 'annfu_tab_foto',
                ];
            }
        }

        // Tab Fiori
        if ($settings['mostra_fiori'] === 'yes') {
            $countFiori = isset($annuncio['fiori']) ? count($annuncio['fiori']) : 0;
            $visibile = (!empty($annuncio['abilitatoFiori']) && $annuncio['abilitatoFiori'] == 1) || $countFiori > 0;
            if ($visibile) {
                $tabs['fiori'] = [
                    'titolo' => $settings['titolo_fiori'] ?: 'Acquista dei fiori',
                    'id' => 'annfu_tab_fiori',
                ];
            }
        }

        // Tab Donazioni
        if ($settings['mostra_donazioni'] === 'yes') {
            $countOpere = isset($annuncio['opereBene']) && is_array($annuncio['opereBene']) ? count($annuncio['opereBene']) : 0;
            if ($countOpere > 0) {
                $tabs['donazioni'] = [
                    'titolo' => $settings['titolo_donazioni'] ?: 'Donazioni',
                    'id' => 'annfu_tab_donazioni',
                ];
            }
        }

        // Se non ci sono tab, non renderizzare nulla
        if (empty($tabs)) {
            return;
        }

        $widget_id = $this->get_id();
        $first_tab = array_key_first($tabs);
        ?>
        <div class="annfu-tabs-wrapper" id="annfu-tabs-<?php echo esc_attr($widget_id); ?>">
            <!-- Navigation -->
            <ul class="annfu-tabs-nav nav nav-tabs" role="tablist">
                <?php foreach ($tabs as $key => $tab): ?>
                    <li class="nav-item" role="presentation">
                        <a class="nav-link <?php echo $key === $first_tab ? 'active' : ''; ?>"
                           href="#<?php echo esc_attr($tab['id'] . '_' . $widget_id); ?>"
                           data-tab="<?php echo esc_attr($key); ?>"
                           role="tab"
                           aria-selected="<?php echo $key === $first_tab ? 'true' : 'false'; ?>">
                            <?php echo esc_html($tab['titolo']); ?>
                        </a>
                    </li>
                <?php endforeach; ?>
            </ul>

            <!-- Content -->
            <div class="annfu-tabs-content tab-content">
                <?php foreach ($tabs as $key => $tab): ?>
                    <div class="tab-pane <?php echo $key === $first_tab ? 'active' : ''; ?>"
                         id="<?php echo esc_attr($tab['id'] . '_' . $widget_id); ?>"
                         role="tabpanel">
                        <?php $this->render_tab_content($key, $annuncio, $metaData); ?>
                    </div>
                <?php endforeach; ?>
            </div>
        </div>

        <style>
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .annfu-tabs-nav {
                display: flex;
                flex-wrap: wrap;
                list-style: none;
                padding: 0;
                margin: 0 0 1rem 0;
                border-bottom: 1px solid #dee2e6;
            }
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .annfu-tabs-nav .nav-item {
                margin-bottom: -1px;
            }
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .annfu-tabs-nav a {
                display: block;
                padding: 0.5rem 1rem;
                text-decoration: none;
                border: 1px solid transparent;
                border-top-left-radius: 0.25rem;
                border-top-right-radius: 0.25rem;
                cursor: pointer;
            }
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .annfu-tabs-nav a:hover {
                border-color: #e9ecef #e9ecef #dee2e6;
            }
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .annfu-tabs-nav a.active {
                border-color: #dee2e6 #dee2e6 #fff;
                background-color: #fff;
            }
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .tab-pane {
                display: none;
            }
            #annfu-tabs-<?php echo esc_attr($widget_id); ?> .tab-pane.active {
                display: block;
            }
        </style>

        <script>
        (function() {
            document.addEventListener('DOMContentLoaded', function() {
                var wrapper = document.getElementById('annfu-tabs-<?php echo esc_js($widget_id); ?>');
                if (!wrapper) return;

                var navLinks = wrapper.querySelectorAll('.annfu-tabs-nav a');
                var tabPanes = wrapper.querySelectorAll('.tab-pane');

                navLinks.forEach(function(link) {
                    link.addEventListener('click', function(e) {
                        e.preventDefault();

                        // Rimuovi active da tutti
                        navLinks.forEach(function(l) { l.classList.remove('active'); l.setAttribute('aria-selected', 'false'); });
                        tabPanes.forEach(function(p) { p.classList.remove('active'); });

                        // Attiva quello cliccato
                        this.classList.add('active');
                        this.setAttribute('aria-selected', 'true');

                        var targetId = this.getAttribute('href').substring(1);
                        var targetPane = document.getElementById(targetId);
                        if (targetPane) {
                            targetPane.classList.add('active');
                        }
                    });
                });
            });
        })();
        </script>
        <?php
    }

    /**
     * Renderizza il contenuto di un tab
     */
    private function render_tab_content($tab_key, $annuncio, $metaData) {
        switch ($tab_key) {
            case 'cordogli':
                $this->render_form_cordogli($annuncio, $metaData);
                break;
            case 'foto':
                $this->render_form_foto($annuncio, $metaData);
                break;
            case 'fiori':
                $this->render_form_fiori($annuncio, $metaData);
                break;
            case 'donazioni':
                $this->render_donazioni($annuncio);
                break;
        }
    }

    private function render_form_cordogli($annuncio, $metaData) {
        $template = get_option('annfu_template', 'default');
        $file = ANNFU_PLUGIN_PATH . 'templates/' . $template . '/_partecipazioni-cordogli-form.php';
        if (!file_exists($file)) {
            $file = ANNFU_PLUGIN_PATH_TEMPLATE_DEFAULT . '_partecipazioni-cordogli-form.php';
        }
        if (file_exists($file)) {
            include($file);
        }
    }

    private function render_form_foto($annuncio, $metaData) {
        $template = get_option('annfu_template', 'default');
        $file = ANNFU_PLUGIN_PATH . 'templates/' . $template . '/_foto-cordogli-form.php';
        if (!file_exists($file)) {
            $file = ANNFU_PLUGIN_PATH_TEMPLATE_DEFAULT . '_foto-cordogli-form.php';
        }
        if (file_exists($file)) {
            include($file);
        }
    }

    private function render_form_fiori($annuncio, $metaData) {
        $template = get_option('annfu_template', 'default');
        $countFiori = isset($annuncio['fiori']) ? count($annuncio['fiori']) : 0;

        // Verifica se usare Floremoria
        if (!empty($annuncio['onoranzaFunebre']['fiori']) && $annuncio['onoranzaFunebre']['fiori'] == 3) {
            $file = ANNFU_PLUGIN_PATH . 'templates/' . $template . '/_fiori-floremoria.php';
            if (!file_exists($file)) {
                $file = ANNFU_PLUGIN_PATH_TEMPLATE_DEFAULT . '_fiori-floremoria.php';
            }
        } else {
            $file = ANNFU_PLUGIN_PATH . 'templates/' . $template . '/_fiori.php';
            if (!file_exists($file)) {
                $file = ANNFU_PLUGIN_PATH_TEMPLATE_DEFAULT . '_fiori.php';
            }
        }

        if (file_exists($file)) {
            include($file);
        }
    }

    private function render_donazioni($annuncio) {
        $countOpere = isset($annuncio['opereBene']) && is_array($annuncio['opereBene']) ? count($annuncio['opereBene']) : 0;
        $template = get_option('annfu_template', 'default');
        $file = ANNFU_PLUGIN_PATH . 'templates/' . $template . '/_donazioni.php';
        if (!file_exists($file)) {
            $file = ANNFU_PLUGIN_PATH_TEMPLATE_DEFAULT . '_donazioni.php';
        }
        if (file_exists($file)) {
            include($file);
        }
    }
}
