package com.xfestudio.xfeservermanager.core.rollback;

import com.xfestudio.xfeservermanager.api.world.WorldStatePayload;
import java.util.Objects;

public record RollbackPlanItem(
        JournalEntry entry,
        WorldStatePayload expectedCurrent,
        WorldStatePayload targetState,
        PlanDisposition disposition,
        String detail
) {
    public RollbackPlanItem {
        Objects.requireNonNull(entry, "entry");
        Objects.requireNonNull(disposition, "disposition");
        detail = detail == null ? "" : detail;
    }

    public boolean executable(boolean force) {
        return disposition == PlanDisposition.READY
                || disposition == PlanDisposition.READY_REQUIRES_CHUNK_LOAD
                || (force && disposition == PlanDisposition.CONFLICT);
    }
}
