<?php

namespace Lknwp\CrowdfundingExtension\Includes\ElementorFields;

use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Typography;

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

class LknwpCrowdfundingTemplateAuthor extends Widget_Base
{
    public function get_name()
    {
        return 'lkn-wp-crowdfunding-author-name';
    }

    public function get_title()
    {
        return __('Author Name', 'link-nacional-wp-crowdfunding-extension');
    }

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

    public function get_categories()
    {
        return ['lkn-wp-crowdfunding-extension'];
    }

    protected function _register_controls()
    {
        // Seção de conteúdo (Prefixo e Tags HTML)
        $this->start_controls_section(
            'content_section',
            [
                'label' => __('Content', 'link-nacional-wp-crowdfunding-extension'),
                'tab' => Controls_Manager::TAB_CONTENT,
            ]
        );

        // Campo para prefixo antes do nome do autor
        $this->add_control(
            'author_prefix',
            [
                'label' => __('Prefix', 'link-nacional-wp-crowdfunding-extension'),
                'type' => Controls_Manager::TEXT,
                'dynamic' => [
                    'active' => true,
                ],
                'default' => __('by', 'link-nacional-wp-crowdfunding-extension'),
                'placeholder' => __('Enter prefix (e.g., by)', 'link-nacional-wp-crowdfunding-extension'),
            ]
        );

        // Tag HTML para personalizar o estilo do prefixo
        $this->add_control(
            'html_tag_prefix',
            [
                'label' => __('HTML Tag for Prefix', 'link-nacional-wp-crowdfunding-extension'),
                'type' => Controls_Manager::SELECT,
                'options' => [
                    'span' => 'Span',
                    'p' => 'Paragraph',
                    'div' => 'Div',
                    'strong' => 'Strong',
                    'em' => 'Emphasize',
                ],
                'default' => 'span',
            ]
        );

        // Tag HTML para o nome do autor (link)
        $this->add_control(
            'html_tag_author',
            [
                'label' => __('HTML Tag for Author Link', 'link-nacional-wp-crowdfunding-extension'),
                'type' => Controls_Manager::SELECT,
                'options' => [
                    'span' => 'Span',
                    'p' => 'Paragraph',
                    'div' => 'Div',
                    'strong' => 'Strong',
                    'em' => 'Emphasize',
                ],
                'default' => 'span',
            ]
        );

        $this->end_controls_section();

        // Seção de Estilo (Cor e Tipografia)
        $this->start_controls_section(
            'style_section',
            [
                'label' => __('Style', 'link-nacional-wp-crowdfunding-extension'),
                'tab' => Controls_Manager::TAB_STYLE,
            ]
        );

        // Cor do texto para o prefixo
        $this->add_control(
            'prefix_text_color',
            [
                'label' => __('Prefix Text Color', 'link-nacional-wp-crowdfunding-extension'),
                'type' => Controls_Manager::COLOR,
                'default' => '#000000', // Cor padrão (preto)
                'selectors' => [
                    '{{WRAPPER}} .author-prefix' => 'color: {{VALUE}};',
                ],
            ]
        );

        // Cor do texto para o nome do autor
        $this->add_control(
            'author_text_color',
            [
                'label' => __('Author Text Color', 'link-nacional-wp-crowdfunding-extension'),
                'type' => Controls_Manager::COLOR,
                'default' => '#00A859', // Cor padrão (preto)
                'selectors' => [
                    '{{WRAPPER}} .author-link' => 'color: {{VALUE}};',
                ],
            ]
        );

        // Tipografia para o prefixo e nome do autor
        $this->add_group_control(
            Group_Control_Typography::get_type(),
            [
                'name' => 'author_typography',
                'label' => __('Typography', 'link-nacional-wp-crowdfunding-extension'),
                'selector' => '{{WRAPPER}} .author-prefix, {{WRAPPER}} .author-link',
            ]
        );

        $this->end_controls_section();
    }

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

        // Obter o prefixo
        $prefix = sanitize_text_field($settings['author_prefix']);

        // Obter o ID do produto atual
        $product_id = get_the_ID(); // Obtém o ID do produto atual

        // Obter o ID do autor do produto
        $author_id = get_post_field('post_author', $product_id);

        // Obter o nome e a URL do autor do produto
        $author_name = ucwords(get_the_author_meta('display_name', $author_id));
        $author_url = get_author_posts_url($author_id);

        if (\Elementor\Plugin::$instance->editor->is_edit_mode() || is_preview() || get_post_type() !== 'product') {
            // Se estiver no editor ou no modo de preview, exibe apenas uma mensagem
            $author_name = __('Author', 'link-nacional-wp-crowdfunding-extension');
            $author_url = '#';
        }

        if (!$author_name) {
            return '';
        }

        // Obter as tags HTML configuradas
        $html_tag_prefix = $settings['html_tag_prefix'];
        $html_tag_author = $settings['html_tag_author'];

        // Construir o HTML separadamente
        $output = '';
        $output .= '<' . esc_html($html_tag_prefix) . ' class="author-prefix">' . esc_html($prefix) . ' ' . '</' . esc_html($html_tag_prefix) . '>';
        $output .= '<' . esc_html($html_tag_author) . ' class="author-name">';
        $output .= '<a href="' . esc_url($author_url) . '" class="author-link">' . esc_html($author_name) . '</a>';
        $output .= '</' . esc_html($html_tag_author) . '>';

        // Exibir o HTML
        echo wp_kses_post($output);
    }
}
