<?php
/**
 * Desactivar completamente el sistema de comentarios
 *
 * Este archivo desactiva completamente los comentarios en WordPress,
 * tanto en el frontend como en el área de administración.
 *
 * @package ROI_Theme
 * @since 1.0.0
 * @link https://github.com/prime-leads-app/analisisdepreciosunitarios.com/issues/4
 */

// Exit if accessed directly
if (!defined('ABSPATH')) {
    exit;
}

/**
 * Desactivar soporte de comentarios y pingbacks
 *
 * Cierra comentarios y pingbacks para todos los post types.
 *
 * @since 1.0.0
 * @param bool $open Si los comentarios están abiertos o no.
 * @return bool Siempre retorna false.
 */
function roi_disable_comments_status() {
    return false;
}
add_filter('comments_open', 'roi_disable_comments_status', 20, 2);
add_filter('pings_open', 'roi_disable_comments_status', 20, 2);

/**
 * Ocultar comentarios existentes
 *
 * Retorna un array vacío para ocultar cualquier comentario existente.
 *
 * @since 1.0.0
 * @param array $comments Array de comentarios.
 * @return array Array vacío.
 */
function roi_hide_existing_comments($comments) {
    return array();
}
add_filter('comments_array', 'roi_hide_existing_comments', 10, 2);

/**
 * Desactivar feeds de comentarios
 *
 * Remueve los enlaces de feeds de comentarios del head.
 *
 * @since 1.0.0
 */
function roi_disable_comment_feeds() {
    // Remover enlaces de feeds de comentarios
    remove_action('wp_head', 'feed_links_extra', 3);

    // Desactivar feeds de comentarios
    add_action('do_feed_rss2_comments', 'roi_disable_feed_comments');
    add_action('do_feed_atom_comments', 'roi_disable_feed_comments');
}
add_action('init', 'roi_disable_comment_feeds');

/**
 * Retornar error en feeds de comentarios
 *
 * @since 1.0.0
 */
function roi_disable_feed_comments() {
    wp_die(
        esc_html__('Los comentarios están desactivados en este sitio.', 'roi-theme'),
        esc_html__('Comentarios no disponibles', 'roi-theme'),
        array(
            'response'  => 404,
            'back_link' => true,
        )
    );
}

/**
 * Desactivar script de respuesta de comentarios
 *
 * Remueve el script comment-reply.js del frontend.
 *
 * @since 1.0.0
 */
function roi_disable_comment_reply_script() {
    wp_deregister_script('comment-reply');
}
add_action('wp_enqueue_scripts', 'roi_disable_comment_reply_script', 100);

/**
 * Remover menú de comentarios del admin
 *
 * Oculta el menú "Comentarios" del área de administración.
 *
 * @since 1.0.0
 */
function roi_remove_comments_admin_menu() {
    remove_menu_page('edit-comments.php');
}
add_action('admin_menu', 'roi_remove_comments_admin_menu');

/**
 * Remover comentarios de la admin bar
 *
 * Oculta el icono de comentarios de la barra de administración.
 *
 * @since 1.0.0
 * @param WP_Admin_Bar $wp_admin_bar Instancia de WP_Admin_Bar.
 */
function roi_remove_comments_admin_bar($wp_admin_bar) {
    $wp_admin_bar->remove_menu('comments');
}
add_action('admin_bar_menu', 'roi_remove_comments_admin_bar', 60);

/**
 * Remover metabox de comentarios del editor
 *
 * Oculta el metabox de comentarios en el editor de posts y páginas.
 *
 * @since 1.0.0
 */
function roi_remove_comments_metabox() {
    // Post types por defecto
    remove_meta_box('commentstatusdiv', 'post', 'normal');
    remove_meta_box('commentstatusdiv', 'page', 'normal');
    remove_meta_box('commentsdiv', 'post', 'normal');
    remove_meta_box('commentsdiv', 'page', 'normal');
    remove_meta_box('trackbacksdiv', 'post', 'normal');
    remove_meta_box('trackbacksdiv', 'page', 'normal');

    // Aplicar a cualquier custom post type que pueda existir
    $post_types = get_post_types(array('public' => true), 'names');
    foreach ($post_types as $post_type) {
        if (post_type_supports($post_type, 'comments')) {
            remove_post_type_support($post_type, 'comments');
            remove_post_type_support($post_type, 'trackbacks');
        }
    }
}
add_action('admin_init', 'roi_remove_comments_metabox');

/**
 * Ocultar columna de comentarios en listados del admin
 *
 * Remueve la columna de comentarios de los listados de posts/páginas.
 *
 * @since 1.0.0
 * @param array $columns Columnas actuales.
 * @return array Columnas modificadas sin comentarios.
 */
function roi_remove_comments_column($columns) {
    unset($columns['comments']);
    return $columns;
}

// Aplicar a posts y páginas
add_filter('manage_posts_columns', 'roi_remove_comments_column');
add_filter('manage_pages_columns', 'roi_remove_comments_column');

/**
 * Desactivar widgets de comentarios
 *
 * Remueve los widgets relacionados con comentarios.
 *
 * @since 1.0.0
 */
function roi_disable_comments_widgets() {
    unregister_widget('WP_Widget_Recent_Comments');
}
add_action('widgets_init', 'roi_disable_comments_widgets');

/**
 * Remover estilos CSS de comentarios recientes
 *
 * Remueve los estilos inline del widget de comentarios recientes.
 *
 * @since 1.0.0
 */
function roi_remove_recent_comments_style() {
    global $wp_widget_factory;

    if (isset($wp_widget_factory->widgets['WP_Widget_Recent_Comments'])) {
        remove_action('wp_head', array(
            $wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
            'recent_comments_style'
        ));
    }
}
add_action('widgets_init', 'roi_remove_recent_comments_style');

/**
 * Redireccionar URLs de comentarios (opcional)
 *
 * Si alguien intenta acceder directamente a URLs de comentarios,
 * redirigir al post padre.
 *
 * @since 1.0.0
 */
function roi_redirect_comment_urls() {
    if (is_comment_feed()) {
        wp_safe_redirect(home_url(), 301);
        exit;
    }
}
add_action('template_redirect', 'roi_redirect_comment_urls');

/**
 * Prevenir nuevos comentarios via REST API
 *
 * Desactiva endpoints de comentarios en REST API.
 *
 * @since 1.0.0
 * @param array $endpoints Endpoints disponibles.
 * @return array Endpoints sin comentarios.
 */
function roi_disable_comments_rest_api($endpoints) {
    if (isset($endpoints['/wp/v2/comments'])) {
        unset($endpoints['/wp/v2/comments']);
    }
    if (isset($endpoints['/wp/v2/comments/(?P<id>[\d]+)'])) {
        unset($endpoints['/wp/v2/comments/(?P<id>[\d]+)']);
    }
    return $endpoints;
}
add_filter('rest_endpoints', 'roi_disable_comments_rest_api');

/**
 * Ocultar opciones de comentarios en el dashboard
 *
 * Remueve metaboxes de comentarios del dashboard.
 *
 * @since 1.0.0
 */
function roi_remove_dashboard_comments() {
    remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');
}
add_action('admin_init', 'roi_remove_dashboard_comments');

/**
 * Desactivar notificaciones de comentarios
 *
 * Previene el envío de emails de notificación de comentarios.
 *
 * @since 1.0.0
 * @return bool Siempre retorna false.
 */
function roi_disable_comment_emails() {
    return false;
}
add_filter('notify_post_author', 'roi_disable_comment_emails', 10, 2);
add_filter('notify_moderator', 'roi_disable_comment_emails', 10, 2);
