<?php
/**
 * 增强评论功能
 * 为WordPress默认文章的评论框添加富文本编辑器功能
 */

// 防止直接访问
if (!defined('ABSPATH')) {
    exit;
}

class EnhancedComments {
    
    public function __construct() {
        // 在前端加载必要的脚本和样式
        add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
        
        // 修改评论表单
        add_filter('comment_form_defaults', array($this, 'modify_comment_form'));
        
        // 在评论显示时格式化内容
        add_filter('comment_text', array($this, 'format_comment_content'), 10, 2);
        
        // 在后台设置页面添加选项
        add_action('admin_init', array($this, 'register_settings'));
        
        // 在评论保存前处理内容
        add_action('pre_comment_on_post', array($this, 'process_comment_content'));
        
        // 在评论区域添加论坛样式
        add_filter('comments_template', array($this, 'load_forum_style_comments'));
    }
    
    /**
     * 在前端加载必要的脚本和样式
     */
    public function enqueue_scripts() {
        // 只在需要显示评论的页面加载
        if (is_single() || is_page()) {
            // 检查当前文章是否属于选中的分类
            if ($this->is_enhanced_comment_enabled()) {
                // 加载WordPress编辑器脚本
                wp_enqueue_editor();
                wp_enqueue_media();
                
                // 添加自定义样式
                wp_enqueue_style('enhanced-comments-css', plugin_dir_url(__FILE__) . '../assets/frontend.css');
                
                // 添加自定义脚本
                wp_enqueue_script('enhanced-comments-js', plugin_dir_url(__FILE__) . '../assets/frontend.js', array('jquery'), '1.0', true);
            }
        }
    }
    
    /**
     * 检查当前文章是否启用增强评论功能
     */
    public function is_enhanced_comment_enabled() {
        // 获取启用增强评论的分类列表
        $enabled_categories = get_option('enhanced_comments_categories', array());
        
        if (empty($enabled_categories)) {
            return false;
        }
        
        // 检查当前文章是否属于这些分类
        if (is_single() || is_page()) {
            global $post;
            if ($post) {
                $post_categories = wp_get_post_categories($post->ID);
                foreach ($post_categories as $category_id) {
                    if (in_array($category_id, $enabled_categories)) {
                        return true;
                    }
                    
                    // 检查父分类
                    $category = get_category($category_id);
                    if ($category && $category->parent > 0) {
                        if (in_array($category->parent, $enabled_categories)) {
                            return true;
                        }
                    }
                }
            }
        }
        
        return false;
    }
    
    /**
     * 修改评论表单
     */
    public function modify_comment_form($defaults) {
        // 检查是否启用增强评论功能
        if (!$this->is_enhanced_comment_enabled()) {
            return $defaults;
        }
        
        // 替换默认的评论文本域为富文本编辑器
        ob_start();
        ?>
        <div id="enhanced-comment-editor">
            <?php
            wp_editor('', 'enhanced_comment', array(
                'textarea_name' => 'comment',
                'textarea_rows' => 10,
                'media_buttons' => true,
                'teeny' => false,
                'quicktags' => true,
                'tinymce' => array(
                    'toolbar1' => 'bold,italic,underline,strikethrough,blockquote,bullist,numlist,alignleft,aligncenter,alignright,link,unlink,undo,redo',
                    'toolbar2' => 'formatselect,forecolor,pastetext,removeformat,charmap,outdent,indent,help'
                ),
            ));
            ?>
        </div>
        <div id="enhanced-comment-preview" class="comment-preview"></div>
        <?php
        $editor_html = ob_get_clean();
        
        // 替换默认的评论字段
        $defaults['comment_field'] = $editor_html;
        
        return $defaults;
    }
    
    /**
     * 处理评论内容
     */
    public function process_comment_content() {
        // 检查是否启用增强评论功能
        if (!$this->is_enhanced_comment_enabled()) {
            return;
        }
        
        // 处理评论内容
        if (isset($_POST['comment'])) {
            // 移除可能的自动添加的<p>标签
            $comment_content = trim($_POST['comment']);
            
            // 保存原始内容
            $_POST['enhanced_comment_content'] = $comment_content;
        }
    }
    
    /**
     * 格式化评论内容显示
     */
    public function format_comment_content($comment_text, $comment = null) {
        // 获取评论所属文章的ID
        $post_id = $comment ? $comment->comment_post_ID : get_the_ID();
        
        // 检查文章是否属于启用增强评论的分类
        $enabled_categories = get_option('enhanced_comments_categories', array());
        $post_categories = wp_get_post_categories($post_id);
        $is_enabled = false;
        
        foreach ($post_categories as $category_id) {
            if (in_array($category_id, $enabled_categories)) {
                $is_enabled = true;
                break;
            }
            
            // 检查父分类
            $category = get_category($category_id);
            if ($category && $category->parent > 0) {
                if (in_array($category->parent, $enabled_categories)) {
                    $is_enabled = true;
                    break;
                }
            }
        }
        
        // 如果未启用增强评论功能，则返回原始内容
        if (!$is_enabled) {
            return $comment_text;
        }
        
        // 格式化评论内容，保持HTML标签
        $formatted_content = wp_kses_post($comment_text);
        
        // 添加评论内容的CSS类以便样式化
        return '<div class="enhanced-comment-content">' . $formatted_content . '</div>';
    }
    
    /**
     * 注册后台设置
     */
    public function register_settings() {
        // 注册设置
        register_setting('discussion', 'enhanced_comments_categories');
        
        // 添加设置字段到讨论设置部分
        add_settings_field(
            'enhanced_comments_categories',
            '增强评论功能分类',
            array($this, 'render_settings_field'),
            'discussion',
            'default'
        );
    }
    
    /**
     * 渲染设置字段
     */
    public function render_settings_field() {
        // 获取当前设置值
        $selected_categories = get_option('enhanced_comments_categories', array());
        
        // 获取所有主分类（没有父级的分类）
        $categories = get_categories(array(
            'parent' => 0,
            'hide_empty' => false
        ));
        
        echo '<p>选择启用增强评论功能的主分类：</p>';
        echo '<ul style="list-style: none; padding: 0;">';
        
        foreach ($categories as $category) {
            $checked = in_array($category->term_id, $selected_categories) ? 'checked' : '';
            echo '<li style="margin-bottom: 10px;">';
            echo '<label style="display: block;">';
            echo '<input type="checkbox" name="enhanced_comments_categories[]" value="' . esc_attr($category->term_id) . '" ' . $checked . '>';
            echo esc_html($category->name);
            echo '</label>';
            echo '</li>';
        }
        
        echo '</ul>';
        echo '<p class="description">选择的分类下的文章将拥有增强的评论功能，包括富文本编辑器和格式化显示。</p>';
    }
    
    /**
     * 加载论坛样式评论模板
     */
    public function load_forum_style_comments($template) {
        // 检查是否启用增强评论功能
        if ($this->is_enhanced_comment_enabled()) {
            // 添加论坛样式CSS类到评论区域
            add_filter('comments_area_css_class', function($classes) {
                $classes[] = 'forum-style';
                return $classes;
            });
        }
        
        return $template;
    }
}

// 初始化类
new EnhancedComments();