<?php
/**
 * Widget Foto Defunto
 *
 * Visualizza la foto del defunto con supporto lightbox e dimensioni personalizzabili.
 *
 * @package AnnunciFunebri
 * @since 4.7.6
 */

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

class ANNFU_Widget_Foto extends ANNFU_Widget_Base {

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

    public function get_title() {
        return __('Foto Defunto', 'annuncifunebri-onoranza');
    }

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

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

        $this->add_control(
            'abilita_lightbox',
            array(
                'label' => __('Abilita Lightbox', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SWITCHER,
                'label_on' => __('Sì', 'annuncifunebri-onoranza'),
                'label_off' => __('No', 'annuncifunebri-onoranza'),
                'return_value' => 'si',
                'default' => 'si',
            )
        );

        $this->aggiungi_controllo_allineamento('{{WRAPPER}} .annfu-widget-foto');

        $this->end_controls_section();

        // ANIMAZIONI
        $this->start_controls_section(
            'sezione_animazioni',
            array(
                'label' => __('Animazioni', 'annuncifunebri-onoranza'),
                'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
            )
        );

        $this->add_control(
            'tipo_animazione',
            array(
                'label' => __('Tipo Animazione', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'options' => array(
                    'none' => __('Nessuna', 'annuncifunebri-onoranza'),
                    'breathing' => __('Respirazione Delicata', 'annuncifunebri-onoranza'),
                    'soft-glow' => __('Bagliore Soffuso', 'annuncifunebri-onoranza'),
                    'gentle-fade' => __('Dissolvenza Leggera', 'annuncifunebri-onoranza'),
                    'slow-zoom' => __('Zoom Lento', 'annuncifunebri-onoranza'),
                    'vignette' => __('Vignetta Delicata', 'annuncifunebri-onoranza'),
                ),
                'default' => 'none',
                'description' => __('Animazioni sobrie e rispettose adatte a foto commemorative', 'annuncifunebri-onoranza'),
            )
        );

        $this->add_control(
            'attivazione_animazione',
            array(
                'label' => __('Attivazione', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'options' => array(
                    'continua' => __('Continua', 'annuncifunebri-onoranza'),
                    'hover' => __('Al passaggio del mouse', 'annuncifunebri-onoranza'),
                ),
                'default' => 'continua',
                'condition' => array(
                    'tipo_animazione!' => 'none',
                ),
            )
        );

        $this->add_control(
            'velocita_animazione',
            array(
                'label' => __('Velocità Animazione', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SLIDER,
                'range' => array(
                    'px' => array('min' => 1, 'max' => 10, 'step' => 1),
                ),
                'default' => array('size' => 5),
                'description' => __('1 = molto lenta, 10 = più veloce (sempre pacata)', 'annuncifunebri-onoranza'),
                'condition' => array(
                    'tipo_animazione!' => 'none',
                ),
            )
        );

        $this->end_controls_section();

        // STILE
        $this->start_controls_section(
            'sezione_stile',
            array(
                'label' => __('Stile Immagine', 'annuncifunebri-onoranza'),
                'tab' => \Elementor\Controls_Manager::TAB_STYLE,
            )
        );

        $this->add_responsive_control(
            'larghezza_foto',
            array(
                'label' => __('Larghezza', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SLIDER,
                'size_units' => array('px', '%'),
                'range' => array(
                    'px' => array('min' => 50, 'max' => 800, 'step' => 10),
                    '%' => array('min' => 10, 'max' => 100, 'step' => 5),
                ),
                'default' => array('unit' => 'px', 'size' => 180),
                'selectors' => array(
                    '{{WRAPPER}} .annfu-foto-immagine img' => 'width: {{SIZE}}{{UNIT}};',
                ),
            )
        );

        $this->add_responsive_control(
            'altezza_foto',
            array(
                'label' => __('Altezza', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SLIDER,
                'size_units' => array('px', 'auto'),
                'range' => array(
                    'px' => array('min' => 50, 'max' => 800, 'step' => 10),
                ),
                'default' => array('unit' => 'px', 'size' => 216),
                'selectors' => array(
                    '{{WRAPPER}} .annfu-foto-immagine img' => 'height: {{SIZE}}{{UNIT}};',
                ),
            )
        );

        $this->add_control(
            'object_fit',
            array(
                'label' => __('Adattamento', 'annuncifunebri-onoranza'),
                'type' => \Elementor\Controls_Manager::SELECT,
                'options' => array(
                    'cover' => __('Copri', 'annuncifunebri-onoranza'),
                    'contain' => __('Contieni', 'annuncifunebri-onoranza'),
                    'fill' => __('Riempi', 'annuncifunebri-onoranza'),
                    'none' => __('Nessuno', 'annuncifunebri-onoranza'),
                ),
                'default' => 'cover',
                'selectors' => array(
                    '{{WRAPPER}} .annfu-foto-immagine img' => 'object-fit: {{VALUE}};',
                ),
            )
        );

        $this->aggiungi_controlli_bordo('{{WRAPPER}} .annfu-foto-immagine img');
        $this->aggiungi_controlli_ombra('{{WRAPPER}} .annfu-foto-immagine img');

        $this->end_controls_section();

        $this->aggiungi_controlli_visibilita();
    }

    protected function render() {
        $impostazioni = $this->ottieni_impostazioni();
        $annuncio = $this->ottieni_dati_annuncio();

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

        if (!$annuncio) {
            if ($this->e_modalita_editor()) {
                $this->render_placeholder_editor('eicon-image', __('Widget Foto Defunto', 'annuncifunebri-onoranza'));
            }
            return;
        }

        $foto = $this->ottieni_campo('foto');
        $foto_grande = $this->ottieni_campo('fotoGrande', $foto);
        $nome = $this->ottieni_campo('nomeVisualizzato');
        $abilita_lightbox = $impostazioni['abilita_lightbox'] === 'si';
        $tipo_animazione = isset($impostazioni['tipo_animazione']) ? $impostazioni['tipo_animazione'] : 'none';
        $attivazione = isset($impostazioni['attivazione_animazione']) ? $impostazioni['attivazione_animazione'] : 'continua';
        $velocita = isset($impostazioni['velocita_animazione']['size']) ? $impostazioni['velocita_animazione']['size'] : 5;

        if (empty($foto)) {
            return;
        }

        // Costruisce le classi CSS per le animazioni
        $animation_classes = '';
        if ($tipo_animazione !== 'none') {
            $animation_classes = 'annfu-foto-animated annfu-anim-' . esc_attr($tipo_animazione);
            if ($attivazione === 'hover') {
                $animation_classes .= ' annfu-anim-on-hover';
            }
        }

        // Calcola la durata dell'animazione basata sulla velocità (inversa)
        $duration = 20 - ($velocita * 1.5); // range da 18.5s (veloce) a 5s (lenta)

        ?>
        <div class="annfu-widget-foto">
            <div class="annfu-foto-immagine <?php echo esc_attr($animation_classes); ?>"
                 <?php if ($tipo_animazione !== 'none'): ?>
                 style="--annfu-anim-duration: <?php echo esc_attr($duration); ?>s;"
                 <?php endif; ?>>
                <?php if ($abilita_lightbox && !empty($foto_grande)): ?>
                    <a href="<?php echo esc_url($foto_grande); ?>" class="annfu-lightbox" data-lightbox="annfu-foto">
                        <img src="<?php echo esc_url($foto); ?>" alt="<?php echo esc_attr($nome); ?>">
                    </a>
                <?php else: ?>
                    <img src="<?php echo esc_url($foto); ?>" alt="<?php echo esc_attr($nome); ?>">
                <?php endif; ?>
            </div>
        </div>
        <?php
    }

    protected function content_template() {
        ?>
        <div class="annfu-widget-foto">
            <div class="annfu-foto-immagine">
                <img src="<?php echo esc_url(ANNFU_IMG . 'anonimo.jpg'); ?>" alt="Foto demo">
            </div>
        </div>
        <?php
    }

    protected function ha_dati_widget() {
        return ANNFU_Fornitore_Dati::ha_foto();
    }
}
