package com.xfestudio.xfeservermanager.api.store;

import com.xfestudio.xfeservermanager.api.audit.AuditEvent;
import com.xfestudio.xfeservermanager.api.world.WorldChangeRecord;
import java.util.List;
import java.util.concurrent.CompletionStage;

/** Non-blocking persistence contract. Implementations must keep writes off the server tick thread. */
public interface EventStore extends AutoCloseable {
    CompletionStage<Void> appendAudit(AuditEvent event);

    CompletionStage<Void> appendWorldChanges(List<WorldChangeRecord> events);

    CompletionStage<Page<AuditEvent>> queryAudit(AuditQuery query);

    CompletionStage<Page<WorldChangeRecord>> queryWorldChanges(WorldChangeQuery query);

    CompletionStage<Void> checkpoint();

    EventStoreHealth health();

    @Override
    void close();
}
