package tech.easyflow.common.web.error;

import jakarta.servlet.http.HttpServletRequest;

/**
 * Web 请求关联标识的统一常量与读取入口。
 */
public final class RequestIdContext {

    /** 对外请求关联标识响应头。 */
    public static final String HEADER_NAME = "X-Request-Id";
    /** Servlet 请求属性名。 */
    public static final String ATTRIBUTE_NAME =
            RequestIdContext.class.getName() + ".requestId";
    /** 日志 MDC 字段名。 */
    public static final String MDC_KEY = "requestId";

    private RequestIdContext() {
    }

    /**
     * 从 Servlet 请求中读取已初始化的请求关联标识。
     *
     * @param request 当前请求
     * @return 请求关联标识；尚未初始化时返回 {@code null}
     */
    public static String get(HttpServletRequest request) {
        if (request == null) {
            return null;
        }
        Object value = request.getAttribute(ATTRIBUTE_NAME);
        return value instanceof String requestId && !requestId.isBlank()
                ? requestId
                : null;
    }
}
