package com.xfestudio.xfeservermanager.api.spi;

import com.xfestudio.xfeservermanager.api.command.CommandAnalysisRequest;
import com.xfestudio.xfeservermanager.api.command.CommandNames;
import com.xfestudio.xfeservermanager.api.command.InvocationAst;
import java.util.Optional;

/** Adds argument-level semantics for commands unknown to the built-in platform adapter. */
public interface CommandSemanticAdapter {
    boolean supports(String canonicalCommandId);

    Optional<InvocationAst> analyze(CommandAnalysisRequest request) throws SemanticAnalysisException;

    default int priority() {
        return 0;
    }

    default boolean supportsRaw(String commandId) {
        return supports(CommandNames.canonicalize(commandId));
    }
}
