package com.sonic.common.event;

import java.util.List;
import java.util.Map;

import lombok.Builder;
import lombok.Getter;

public interface EventConsumer {

    /**
     * 注册EventHandler
     *
     * @param eventCode event类型的唯一标示
     * @param eventHandler eventHandler
     * @return EventHandlerRepository
     */
    EventHandlerRepository registerHandler(Event.EventCode eventCode, EventHandler eventHandler);

    /**
     * 为多个eventCodes注册一个eventHandler
     *
     * @param eventCodes list of eventCode
     * @param eventHandler eventHandler
     * @return EventHandlerRepository
     */
    EventHandlerRepository registerHandlers(List<Event.EventCode> eventCodes, EventHandler eventHandler);

    /**
     * message的处理方法
     * @param message message
     * @see EventConsumer#onEvent(String, Map)
     * @deprecated 不推荐使用. {@link EventConsumer#onEvent(String, Map)}
     */
    @Deprecated
    void onEvent(String message);

    /**
     * message的处理方法
     *
     * @param message message
     * @Param ext 扩展信息.
     * @return 如果事件被handler处理返回true, 否则返回false
     */
    boolean onEvent(String message, Map<String, Object> ext);

    @Builder
    @Getter
    class EventWrapper {
        Event event;
        EventConsumer consumer;
        boolean isHandled;
        Map<String, Object> ext;
    }

}
