package io.papermc.paper.plugin.entrypoint.strategy;

import io.papermc.paper.plugin.provider.PluginProvider;
import io.papermc.paper.plugin.provider.entrypoint.DependencyContext;

import java.util.List;

/**
 * Used to share code with the modern and legacy plugin load strategy.
 *
 * @param <T>
 */
public interface ProviderConfiguration<T> {

    void applyContext(PluginProvider<T> provider, DependencyContext dependencyContext);

    boolean load(PluginProvider<T> provider, T provided);

    List<String> requiredDependencies(PluginProvider<T> provider);

    List<String> optionalDependencies(PluginProvider<T> provider);

    List<String> loadBeforeDependencies(PluginProvider<T> provider);


}
