package org.springblade.file.listener;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.context.ApplicationEvent;

import java.util.function.Function;
import java.util.stream.Stream;

/**
 * 文件事件枚举
 * @author bfhuange
 * @since 2024/11/22
 */
@AllArgsConstructor
@Getter
public enum FileEvent {
    /**
     *  上传完成事件
     */
    UPLOADED(FileUploadedEvent::new),
    /**
     *  解压开始事件
     */
    UNZIP_START(UnzipStartEvent::new),
    /**
     *  解压完成事件
     */
    UNZIP_COMPLETED(UnzipCompletedEvent::new),
    /**
     *  解压失败事件
     */
    UNZIP_FAILED(UnzipFailEvent::new),
    ;
    /**
     *  事件函数
     */
    private final Function<Long, ApplicationEvent> eventFunction;

    /**
     *  根据编码创建事件
     * @param code
     * @param id
     * @return
     */
    public static ApplicationEvent createEvent(String code, Long id) {
        if (code == null || code.isBlank()) {
            return null;
        }
        return Stream.of(values())
                .filter(event -> event.name().equalsIgnoreCase(code))
                .findFirst()
                .map(event -> event.getEventFunction().apply(id))
                .orElse(null);
    }
}
