package cn.iocoder.yudao.module.server.utils;

import com.google.code.kaptcha.Producer;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class TraditionalCaptchaConfig {

    /**
     * 纯数字验证码（优化版）
     */
    @Bean(name = "numberCaptchaProducer")
    public Producer numberCaptchaProducer() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        Properties properties = new Properties();
        // 图片样式
        properties.setProperty("kaptcha.border", "no");  // 去掉边框，减少干扰
        properties.setProperty("kaptcha.image.width", "160");  // 增加宽度
        properties.setProperty("kaptcha.image.height", "50");  // 增加高度

        // 文字样式 - 提高对比度
        properties.setProperty("kaptcha.textproducer.font.color", "0,0,0");  // 纯黑色
        properties.setProperty("kaptcha.textproducer.font.size", "36");  // 增大字体
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Microsoft YaHei");  // 支持多个字体
        properties.setProperty("kaptcha.textproducer.char.length", "4");  // 验证码长度
        properties.setProperty("kaptcha.textproducer.char.string", "23456789");  // 去掉0和1（易混淆）
        properties.setProperty("kaptcha.textproducer.char.space", "4");  // 增加字符间距

        // 干扰配置 - 大幅减少干扰
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");  // 完全去掉干扰线
        properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");  // 改用更清晰的效果

        // 背景配置 - 纯白背景
        properties.setProperty("kaptcha.background.clear.from", "255,255,255");  // 白色背景
        properties.setProperty("kaptcha.background.clear.to", "255,255,255");

        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        return defaultKaptcha;
    }

    /**
     * 数字+字母混合验证码（优化版）
     */
    @Bean(name = "mixedCaptchaProducer")
    public Producer mixedCaptchaProducer() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        Properties properties = new Properties();
        properties.setProperty("kaptcha.border", "no");
        properties.setProperty("kaptcha.image.width", "160");
        properties.setProperty("kaptcha.image.height", "50");
        properties.setProperty("kaptcha.textproducer.font.color", "0,100,0");  // 深绿色，更清晰
        properties.setProperty("kaptcha.textproducer.font.size", "34");
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Helvetica");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        // 去掉易混淆字符：0,1,i,I,l,L,o,O
        properties.setProperty("kaptcha.textproducer.char.string", "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ");
        properties.setProperty("kaptcha.textproducer.char.space", "4");
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.LowNoise");  // 轻微干扰
        properties.setProperty("kaptcha.background.clear.from", "245,245,245");  // 浅灰背景
        properties.setProperty("kaptcha.background.clear.to", "255,255,255");

        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        return defaultKaptcha;
    }

    /**
     * 数学计算验证码（优化版）
     */
    @Bean(name = "mathCaptchaProducer")
    public Producer mathCaptchaProducer() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        Properties properties = new Properties();
        properties.setProperty("kaptcha.border", "no");
        properties.setProperty("kaptcha.image.width", "180");  // 数学表达式需要更宽
        properties.setProperty("kaptcha.image.height", "50");
        properties.setProperty("kaptcha.textproducer.font.color", "139,0,0");  // 深红色
        properties.setProperty("kaptcha.textproducer.font.size", "32");
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier New");
        properties.setProperty("kaptcha.textproducer.char.length", "5");  // 如：3+4=?
        properties.setProperty("kaptcha.textproducer.char.space", "3");
//        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");  // 数学验证码不需要干扰
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");  // 数学验证码不需要干扰
        properties.setProperty("kaptcha.background.clear.from", "255,255,255");
        properties.setProperty("kaptcha.background.clear.to", "255,255,255");

        // 自定义文本生成器（数学表达式）
        properties.setProperty("kaptcha.textproducer.impl", "cn.iocoder.yudao.module.server.utils.MathTextCreator");

        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        return defaultKaptcha;
    }

    /**
     * 添加一个最简验证码配置（最高清晰度）
     */
    @Bean(name = "simpleCaptchaProducer")
    public Producer simpleCaptchaProducer() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();

        Properties properties = new Properties();
        // 最简配置，最高清晰度
        properties.setProperty("kaptcha.border", "no");
        properties.setProperty("kaptcha.image.width", "180");
        properties.setProperty("kaptcha.image.height", "60");
        properties.setProperty("kaptcha.textproducer.font.color", "0,0,0");
        properties.setProperty("kaptcha.textproducer.font.size", "40");
        properties.setProperty("kaptcha.textproducer.font.names", "Arial Black");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        properties.setProperty("kaptcha.textproducer.char.string", "23456789ABCDEFGHJKLMNPQRSTUVWXYZ");
        properties.setProperty("kaptcha.textproducer.char.space", "5");
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
        properties.setProperty("kaptcha.background.clear.from", "255,255,255");
        properties.setProperty("kaptcha.background.clear.to", "255,255,255");

        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);

        return defaultKaptcha;
    }
}