<?php
/* Debug */
// ini_set('display_errors', 1);
// error_reporting(E_ALL);

define('O2_VERSION', '0');

/* ========================================================== */
/* Require files */
/* ========================================================== */
require_once get_template_directory() . '/app/admin-options.php';

require_once get_template_directory() . '/app/o2m/autoload.php';
if (is_admin()) {
  require_once get_template_directory() . '/app/metaboxes.php';
}
// require_once get_template_directory() . '/app/post-types.php';
require_once get_template_directory() . '/app/head-footer.php';

/* ========================================================== */
/* Add or Remove Actions */
/* ========================================================== */
/* Remove tags do WordPress do header do documento */
remove_action('wp_head', 'wp_generator'); // Versão do WordPress
remove_action('wp_head', 'rsd_link'); // Informações sobre o endpoint XML-RPC
remove_action('wp_head', 'rest_output_link_wp_head'); // Informações sobre a API REST.
remove_action('wp_head', 'wlwmanifest_link'); // Windows Live Writer
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); // Posts adjacentes do WordPress

/* Remove o css do editor classico no front */
add_action('wp_enqueue_scripts', function () {
  wp_dequeue_style('classic-theme-styles');
}, 20);

/* Remove o css do editor de blocos do front */
add_action('wp_print_styles', function () {
  wp_dequeue_style('wp-block-library');
}, 100);

/* Altere os tamanhos de imagem padrão para os valores desejados */
add_action('after_setup_theme', function () {
  update_option('thumbnail_size_w', 400);    // Largura em pixels
  update_option('thumbnail_size_h', 300);    // Altura em pixels
  update_option('thumbnail_crop', true);     // Cortar para ajustar ao tamanho

  update_option('medium_size_w', 800);       // Largura do tamanho médio em pixels
  update_option('medium_size_h', 600);       // Altura do tamanho médio em pixels

  update_option('large_size_w', 1600);        // Largura do tamanho grande em pixels
  update_option('large_size_h', 1200);        // Altura do tamanho grande em pixels

  add_image_size('extra-large', 1920, 1440, false);
});

/* Desativa compatibilidade de emojis */
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

/* Desativa funcionalidade de categorias e tags do blog */
// add_action('init', 'o2_disable_blog_tags');

/* ========================================================== */
/* Theme support */
/* ========================================================== */
add_theme_support('title-tag');
add_theme_support('post-thumbnails');
add_theme_support('menus');
add_theme_support('widgets');
add_theme_support('html5', ['script', 'style']);
add_theme_support('editor-styles');

/* ========================================================== */
/* Register menu */
/* ========================================================== */
register_nav_menu('menu-header', 'Menu Principal');

register_sidebar(array(
  'name' => 'ESG - Cabeçalho',
  'id' => 'esg-header',
  'class' => 'list-unstyled menu',
  'before_widget' => '',
  'after_widget' => '',
  'before_title' => '<h3 class="fw700">',
  'after_title' => '</h3>'
));

register_sidebar(array(
  'name' => 'ESG - Cabeçalho - EN',
  'id' => 'esg-header-en',
  'class' => 'list-unstyled menu',
  'before_widget' => '',
  'after_widget' => '',
  'before_title' => '<h3 class="fw700">',
  'after_title' => '</h3>'
));

register_sidebar(array(
  'name' => 'ESG - Cabeçalho - ES',
  'id' => 'esg-header-es',
  'class' => 'list-unstyled menu',
  'before_widget' => '',
  'after_widget' => '',
  'before_title' => '<h3 class="fw700">',
  'after_title' => '</h3>'
));

register_sidebar(array(
  'name' => 'EKO - Cabeçalho',
  'id' => 'eko-header',
  'class' => 'list-unstyled menu',
  'before_widget' => '',
  'after_widget' => '',
  'before_title' => '<h3 class="fw700">',
  'after_title' => '</h3>'
));
register_sidebar(array(
  'name' => 'EKO - Cabeçalho - EN',
  'id' => 'eko-header-en',
  'class' => 'list-unstyled menu',
  'before_widget' => '',
  'after_widget' => '',
  'before_title' => '<h3 class="fw700">',
  'after_title' => '</h3>'
));
register_sidebar(array(
  'name' => 'EKO - Cabeçalho - ES',
  'id' => 'eko-header-es',
  'class' => 'list-unstyled menu',
  'before_widget' => '',
  'after_widget' => '',
  'before_title' => '<h3 class="fw700">',
  'after_title' => '</h3>'
));

/* ========================================================== */
/* Filters */
/* ========================================================== */
// /* Desativa o uso do editor de blocos para a edição de widgets e posts no WordPress, substituindo-os pelo editor clássico */
add_filter('use_widgets_block_editor', '__return_false');
add_filter('use_block_editor_for_post', '__return_false');

// /* Personaliza a marca de finalização dos resumos dos posts no front-end do WordPress */
add_filter('excerpt_more', 'o2_excerpt_more');

// /* Define um tamanho personalizado para o resumo dos posts no front-end do WordPress */
add_filter('excerpt_length', 'o2_custom_excerpt_length');

// /* Remove as informações de autoria dos dados de resposta do oEmbed no WordPress. */
add_filter('oembed_response_data', 'o2_disable_author_embeds');

// /* Adiciona classes nas imagens e remove tamanhos definidos do post */
add_filter('the_content', 'o2_responsive_images', 10, 2);

// /* Modifica o processo padrão de geração do breadcrumb fornecido pelo plugin Yoast SEO */
add_filter('wpseo_breadcrumb_links', 'o2_override_yoast_breadcrumb_trail');

// /* Remove os filtros do plugin Yoast SEO no painel do Wordpress */
add_action('admin_init', 'o2_remove_yoast_seo_filters_from_admin');

// /* Redefine a prioridade do metabox do plugin Yoast SEO */
add_filter('wpseo_metabox_prio', 'o2_lower_yoast_metabox_priority');

// /* Adiciona o filtro para substituir a post_thumbnail() quando ela não existir */
add_filter('post_thumbnail_html', 'replace_post_thumbnail', 10, 5);
add_filter('post_thumbnail_url', 'replace_post_thumbnail_url', 10, 2);

// /* tira os br e p do contact form 7 */
add_filter('wpcf7_autop_or_not', '__return_false');

/* Possibilita adicionar type="module" no enqueue script do wp */
add_filter("script_loader_tag", "add_module_to_my_script", 10, 3);

// Remove a validação enum do CF7
remove_action('wpcf7_swv_create_schema', 'wpcf7_swv_add_select_enum_rules', 20, 2);

/* ========================================================== */
/* Functions */
/* ========================================================== */
// Melhora a legibilidade do var_dump
function dd($q, $vdump = false)
{
  echo '<pre>';
  if ($vdump) {
    var_dump($q);
  } else {
    print_r($q);
  }
  echo '</pre>';
}

function o2_css_attributes_filter($var)
{
  return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}

function o2_disable_blog_tags()
{
  register_taxonomy('post_tag', []);
}

function o2_excerpt_more($more)
{
  if (is_admin()) {
    return $more;
  }
  return '...'; // substitui o [...] do resumo
}

function o2_custom_excerpt_length($length)
{
  if (is_admin()) {
    return $length;
  }
  $palavras = 16; //define o tamanho do excerpt(resumo do post)
  return $palavras;
}

function o2_disable_author_embeds($data)
{
  unset($data['author_url']);
  unset($data['author_name']);
  return $data;
}

function o2_responsive_images($html)
{
  $classes = 'content-image';
  if (preg_match('/<img.*? class="/', $html)) {
    $html = preg_replace('/(<img.*? class=".*?)(".*?\/>)/', '$1 ' . $classes . ' $2', $html);
  }

  $html = preg_replace('/(width|height)=\"\d*\"\s/', "", $html);
  return $html;
}

// Chama a função de breadcrumbs do plugin Yoast SEO se o plugin estiver instalado
// Serve para não acusar erro de undefined function em todas as páginas que for chamada
function o2_breadcrumbs()
{
  if (function_exists('yoast_breadcrumb')) {
    yoast_breadcrumb();
  }
}

function o2_override_yoast_breadcrumb_trail($links)
{  // Declaração da função e definição do parâmetro de entrada '$links'
  global $post;
  $breadcrumb = [];

  if (is_category() || is_single()) {
    $breadcrumb[] = [
      'url' => home_url('/blog'),
      'text' => 'Blog'
    ];
    array_splice($links, 1, -2, $breadcrumb);
  }

  if (get_query_var('s')) {
    $links[1]['url'] = home_url('/blog');
    $links[1]['text'] = 'Blog';
    $links[] = [
      'url' => '',
      'text' => 'Resultados da Busca'
    ];
  }

  return $links; // Retorna os links reorganizados 
}

// Função para remover filtros do Yoast SEO no painel do Wordpress
function o2_remove_yoast_seo_filters_from_admin()
{
  remove_action('restrict_manage_posts', 'wpseo_posts_filter_dropdown');
}

// Função para mudar a prioridade do metabox da Yoast SEO
function o2_lower_yoast_metabox_priority($priority)
{
  return 'low';
}

function add_module_to_my_script($tag, $handle, $src)
{
  if ("app" === $handle) {
    $tag = '<script type="module" src="' . esc_url($src) . '"></script>';
  }

  return $tag;
}

function get_random_unsplash_image($keyword)
{
  // Constrói a URL da imagem aleatória do Unsplash com a palavra-chave
  $image_url = 'https://source.unsplash.com/featured/?' . urlencode($keyword) . '&random=' . wp_generate_password(8, false);

  // Retorna a URL da imagem
  return $image_url;
}

// Função para substituir post_thumbnail()
function replace_post_thumbnail($html, $post_id, $post_thumbnail_id, $size, $attr)
{
  // Verificar se a post_thumbnail existe
  if (empty($html)) {
    // Palavra-chave para buscar uma imagem aleatória no Unsplash
    $keyword = 'dog'; // Substitua pela palavra-chave desejada

    // Obtém a URL da imagem aleatória do Unsplash com a palavra-chave
    $random_image_url = get_random_unsplash_image($keyword);

    // HTML para exibir a imagem aleatória
    $attr_text = "";
    if (is_array($attr))
      foreach ($attr as $key => $value)
        $attr_text .= " $key='$value'";
    $html = '<img src="' . $random_image_url . '" alt="imagem aleatória unsplash" ' . $attr_text . '/>';
  }

  // Retorna o HTML da post_thumbnail() ou da imagem aleatória
  return $html;
}

// Função para substituir the_post_thumbnail_url()
function replace_post_thumbnail_url($url, $post_id)
{
  // Verificar se a URL da post_thumbnail está vazia
  if (empty($url)) {
    // Palavra-chave para buscar uma imagem aleatória no Unsplash
    $keyword = 'nature'; // Substitua pela palavra-chave desejada

    // Obtém a URL da imagem aleatória do Unsplash com a palavra-chave
    $random_image_url = get_random_unsplash_image($keyword);

    // Retorna a URL da imagem aleatória
    return $random_image_url;
  }

  // Retorna a URL da post_thumbnail() ou da imagem aleatória
  return $url;
}


// Adiciona Aria Label para os itens dos menus
function add_aria_label_to_menu_items($atts, $item, $args)
{
  if (empty($atts['aria-label'])) {
    $atts['aria-label'] = $item->title;
  }

  return $atts;
}
add_filter('nav_menu_link_attributes', 'add_aria_label_to_menu_items', 10, 3);

// Substitui o separador do yoast por um SVG
function custom_yoast_seo_breadcrumb_separator($separator_output)
{
  $custom_separator = '<svg width="9" height="14" viewBox="0 0 9 14" fill="none" xmlns="http://www.w3.org/2000/svg">
  <path d="M1.08398 1.16675L6.91732 7.00008L1.08398 12.8334" stroke="#9999AD" stroke-width="2"/>
  </svg>';

  return $custom_separator;
}
add_filter('wpseo_breadcrumb_separator', 'custom_yoast_seo_breadcrumb_separator');

function count_post_views()
{
  if (is_single()) {
    global $post;
    $post_id = $post->ID;

    // Obtém o número atual de visualizações do post
    $views = get_post_meta($post_id, 'post_views', true);

    // Incrementa o número de visualizações
    $views = intval($views) + 1;

    // Atualiza o valor do campo personalizado 'post_views'
    update_post_meta($post_id, 'post_views', $views);
  }
}

// Registra a função para ser executada quando o post é visualizado
add_action('wp_head', 'count_post_views');

function bg_parallax()
{
?>
  <script>
    jQuery(window).scroll(function() {
      const scrollTop = jQuery(this).scrollTop() / 4;

      jQuery('.parallax').css('background-position', `${scrollTop}px top`);
    });
  </script>
<?php
}
add_action('wp_footer', 'bg_parallax', 100);

function stringToSlug($text)
{
  // Converte para UTF-8 e remove caracteres especiais
  $text = iconv('UTF-8', 'ASCII//TRANSLIT', $text);

  // Remove caracteres que não são letras, números, espaços ou hífens
  $text = preg_replace('~[^\\pL0-9_]+~u', '-', $text);

  // Remove múltiplos hífens e transforma para minúsculas
  $text = preg_replace('~-+~', '-', $text);
  $text = trim($text, '-');
  $text = strtolower($text);

  return $text;
}
