package com.sckw.transport.handler;


import lombok.Data;
import lombok.experimental.Accessors;

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

/**
 * Author: donglang
 * Time: 2025-11-19
 * Des: 运单业务上下文：存储流程中所有需要的参数、中间数据和依赖组件
 * Version: 1.0
 */

@Data
@Accessors(chain = true)
public class BusinessContext  {

    private static final ThreadLocal<Map<String, Object>> CONTEXT = ThreadLocal.withInitial(HashMap::new);

    /**
     * 设置上下文值
     */
    public static void set(String key, Object value) {
        CONTEXT.get().put(key, value);
    }

    /**
     * 获取上下文值
     */
    @SuppressWarnings("unchecked")
    public static <T> T get(String key) {
        return (T) CONTEXT.get().get(key);
    }

    /**
     * 获取上下文值，如果不存在则返回默认值
     */
    @SuppressWarnings("unchecked")
    public static <T> T get(String key, T defaultValue) {
        T value = (T) CONTEXT.get().get(key);
        return value != null ? value : defaultValue;
    }

    /**
     * 移除指定键的值
     */
    public static void remove(String key) {
        CONTEXT.get().remove(key);
    }

    /**
     * 清空当前线程的上下文
     * 重要：必须在业务处理完成后调用，防止内存泄漏
     */
    public static void clear() {
        CONTEXT.get().clear();
        CONTEXT.remove();
    }
}
