package com.lingniu.ingest.api.sink;

import com.lingniu.ingest.api.event.VehicleEvent;

import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 事件出口 SPI。Kafka、本地归档、指标打点都是一种 Sink。
 *
 * <p>实现应当线程安全、非阻塞（内部异步 IO）。由 Disruptor EventBus 扇出调用。
 */
public interface EventSink {

    String name();

    CompletableFuture<Void> publish(VehicleEvent event);

    default CompletableFuture<Void> publishBatch(List<VehicleEvent> batch) {
        CompletableFuture<?>[] all = batch.stream().map(this::publish).toArray(CompletableFuture[]::new);
        return CompletableFuture.allOf(all);
    }

    /** 是否接受此事件类型。默认全部接受。 */
    default boolean accepts(VehicleEvent event) {
        return true;
    }
}
