package vip.xiaonuo.coldchain.core.service.dataprocess.handler;

import vip.xiaonuo.coldchain.core.service.dataprocess.model.ColdChainMessageData;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @author jackzhou
 * @version 1.0
 * @project jfcloud-coldchain
 * @description
 * @date 2024/11/12 13:40:41
 */
public abstract class AbstractColdChainDataHandler<T extends ColdChainMessageData> implements ColdChainDataHandler<T> {
    /**
     * 注册处理器到 HandlerRegistry
     */
    public void registerHandler() {
        ColdChainHandlerRegistry.registerHandler(getDataClass(), this);
    }

    /**
     * 获取处理的数据类型，使用泛型反射来获取实际类型
     */
    public Class<T> getDataClass() {
        // 获取父类的泛型类型
        Type superClass = getClass().getGenericSuperclass();
        if (superClass instanceof ParameterizedType) {
            ParameterizedType parameterizedType = (ParameterizedType) superClass;
            Type[] typeArguments = parameterizedType.getActualTypeArguments();
            // 返回泛型类型的第一个参数
            return (Class<T>) typeArguments[0];
        } else {
            throw new IllegalStateException("无法解析泛型类型");
        }
    }

    @Override
    public void login(T data) {
    }

    @Override
    public void heartbeat(T data) {
    }
}
