package tc.oc.pgm.goals;

import javax.annotation.Nullable;

import tc.oc.api.docs.virtual.MatchDoc;

/**
 * A {@link Goal} that is completed gradually, and can report completion as a percentage
 */
public interface IncrementalGoal<T extends GoalDefinition> extends Goal<T> {
    /**
     * Return the completion percentage of this goal in the range 0..1
     */
    double getCompletion();

    /**
     * Render a string representation of goal completion
     */
    String renderCompletion();

    /**
     * Render a precise representation of goal completion, or null if no precise format is supported
     */
    @Nullable String renderPreciseCompletion();

    /**
     * True if partial completion should be visible to participating players
     */
    boolean getShowProgress();

    @Override
    MatchDoc.IncrementalGoal getDocument();
}
