package com.xindazhou.framework.redis.config;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;

import java.util.HashMap;
import java.util.Map;

/**
 * Redis 密码修复处理器
 * 功能：
 * 1. 当 Redis password 为空字符串时，设置为 null，避免 Redisson 尝试 AUTH（无密码场景）
 * 2. 当 Redis password 有值时，保持不变（有密码场景）
 * 3. 当 Redis password 为 null 时，保持不变（无密码场景）
 */
public class XdzRedisPasswordFixProcessor implements EnvironmentPostProcessor {

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        String password = environment.getProperty("spring.data.redis.password");
        
        // 如果 password 是空字符串，设置为 null
        // 这样 Redisson 就不会尝试 AUTH，支持无密码的 Redis
        if (password != null && password.trim().isEmpty()) {
            Map<String, Object> properties = new HashMap<>();
            properties.put("spring.data.redis.password", null);
            
            MutablePropertySources propertySources = environment.getPropertySources();
            propertySources.addFirst(new MapPropertySource("redisPasswordFix", properties));
        }
        // 如果 password 有值，保持不变，支持有密码的 Redis
        // 如果 password 是 null，保持不变，支持无密码的 Redis
    }
}

