package com.xfestudio.xfeservermanager.api.spi;

import com.xfestudio.xfeservermanager.api.world.WorldStateKind;
import com.xfestudio.xfeservermanager.api.world.WorldStatePayload;
import com.xfestudio.xfeservermanager.api.world.WorldStateView;

/** Encodes and decodes restorable state while keeping game classes outside the common API. */
public interface WorldStateCodecAdapter {
    String codecId();

    boolean supports(WorldStateKind kind, String resourceId);

    WorldStatePayload encode(WorldStateView state) throws WorldStateCodecException;

    WorldStateView decode(WorldStatePayload payload, WorldStateKind expectedKind, String expectedResourceId)
            throws WorldStateCodecException;

    default int priority() {
        return 0;
    }
}
