<?php

/**
 * 文件功能：聊天内容过滤器 (敏感词与 HTML 净化)
 * 替代旧版 ASP中的 TrStr() / SHTM() 等各种过滤函数。
 *
 * @author   ChatRoom Laravel
 *
 * @version  1.0.0
 */

namespace App\Services;

class MessageFilterService
{
    /**
     * 简单的关键词黑名单，未来可放到数据库或 Redis 动态加载
     */
    private array $badWords = [
        '外挂', '刷单', '脚本', // 示例黑名单
    ];

    /**
     * 执行过滤净化，保障入库和显示安全。
     *
     * @param  string  $content  原始用户发送内容
     * @return string 净化后的内容
     */
    public function filter(string $content): string
    {
        if ($content === '') {
            return '';
        }

        // 1. HTML 标签全量脱除，阻绝任意 XSS/HTML 注入
        $content = strip_tags($content);

        // 2. 敏感词替换
        foreach ($this->badWords as $word) {
            if (mb_strpos($content, $word) !== false) {
                // 将脏字替换为相同长度的 星号 或 提示
                $replacement = str_repeat('*', mb_strlen($word));
                $content = str_replace($word, $replacement, $content);
            }
        }

        // 3. 将连续的空格去重，只保留一个真正的空格
        $content = preg_replace('/\s+/', ' ', $content);

        return trim($content);
    }
}
