package dev.elaine.search;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public final class LogSanitizer {
    private static final Set<String> ALLOWED = Set.of("@timestamp", "service.name", "log.level", "message", "trace.id");
    private static final Set<String> SECRET_NAMES = Set.of("password", "token", "authorization");

    public Map<String, String> sanitize(Map<String, String> event) {
        Map<String, String> result = new LinkedHashMap<>();
        event.forEach((key, value) -> {
            if (ALLOWED.contains(key)) result.put(key, redact(value));
            else if (SECRET_NAMES.contains(key.toLowerCase())) result.put(key, "[REDACTED]");
        });
        return Map.copyOf(result);
    }

    private String redact(String value) {
        if (value == null) return null;
        return value.replaceAll("(?i)(password|token)=([^\\s&]+)", "$1=[REDACTED]");
    }
}
