package com.tourism.webadmin.config;

import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.github.houbb.sensitive.word.support.allow.WordAllows;
import com.github.houbb.sensitive.word.support.deny.WordDenys;
import com.tourism.webadmin.utils.MyWordAllow;
import com.tourism.webadmin.utils.MyWordDeny;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * SensitiveWordConfig 类。
 * <p>
 * 描述：敏感词配置
 *
 * @author huangwenwen
 * @date 2024/12/20
 */


@Configuration
public class SensitiveWordConfig {

    //白名单
    private final MyWordAllow myWordAllow;

    //黑名单
    private final MyWordDeny myWordDeny;

    // 构造器注入
    public SensitiveWordConfig(MyWordAllow myWordAllow, MyWordDeny myWordDeny) {
        this.myWordAllow = myWordAllow;
        this.myWordDeny = myWordDeny;
    }

    /**
     * 配置并初始化敏感词过滤器
     *
     * 本方法通过链式调用的方式配置了一个敏感词过滤器实例，该过滤器能够根据预设的规则
     * 对文本中的敏感词汇进行识别和过滤配置包括允许和禁止的词汇列表，以及各种检查的启用状态
     * 和样式忽略选项
     *
     * @return SensitiveWordBs 实例，用于执行敏感词过滤操作
     */
    @Bean
    public SensitiveWordBs sensitiveWordBs() {
        return SensitiveWordBs.newInstance()
                //加载自定义的敏感词
                .wordAllow(WordAllows.chains(WordAllows.defaults(), myWordAllow)) // 设置允许的词汇列表
                .wordDeny(WordDenys.chains(WordDenys.defaults(), myWordDeny)) // 设置允许的词汇列表
//                .enableWordCheck(true) // 启用词汇检查
//                .enableNumCheck(true) // 启用数字检查
//                .enableEmailCheck(true) // 启用邮箱检查
//                .enableUrlCheck(true) // 启用URL检查
//                .ignoreCase(true) // 忽略大小写
//                .ignoreWidth(true) // 忽略字符宽度
//                .ignoreNumStyle(true) // 忽略数字样式
//                .ignoreChineseStyle(true) // 忽略中文样式
//                .ignoreEnglishStyle(true) // 忽略英文样式
                .ignoreRepeat(false) // 忽略重复字符
                .init(); // 初始化敏感词过滤器
    }
}
