// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.core.universe.world.storage;

import org.bson.BsonDocument;
import com.hypixel.hytale.server.core.util.BsonUtil;
import com.hypixel.hytale.component.Holder;
import java.util.concurrent.CompletableFuture;
import java.nio.ByteBuffer;
import java.util.Objects;
import javax.annotation.Nonnull;
import com.hypixel.hytale.component.Store;

public abstract class BufferChunkSaver implements IChunkSaver
{
    @Nonnull
    private final Store<ChunkStore> store;
    
    protected BufferChunkSaver(@Nonnull final Store<ChunkStore> store) {
        Objects.requireNonNull(store);
        this.store = store;
    }
    
    @Nonnull
    public Store<ChunkStore> getStore() {
        return this.store;
    }
    
    @Nonnull
    public abstract CompletableFuture<Void> saveBuffer(final int p0, final int p1, @Nonnull final ByteBuffer p2);
    
    @Nonnull
    public abstract CompletableFuture<Void> removeBuffer(final int p0, final int p1);
    
    @Nonnull
    @Override
    public CompletableFuture<Void> saveHolder(final int x, final int z, @Nonnull final Holder<ChunkStore> holder) {
        final BsonDocument document = ChunkStore.REGISTRY.serialize(holder);
        final ByteBuffer buffer = ByteBuffer.wrap(BsonUtil.writeToBytes(document));
        return this.saveBuffer(x, z, buffer);
    }
    
    @Nonnull
    @Override
    public CompletableFuture<Void> removeHolder(final int x, final int z) {
        return this.removeBuffer(x, z);
    }
}
