package org.implab.gradle.variants.artifacts;

import java.util.Optional;

import org.gradle.api.Action;
import org.gradle.api.InvalidUserDataException;
import org.implab.gradle.variants.core.Variant;

/**
 * Контекст работы с вариантами публикации, становится доступным после
 * финализации модели вариантов. Фактически является живой моделью
 */
public interface OutgoingVariantsContext {

    ArtifactAssemblies getAssemblies();

    void configureVariant(Variant variant, Action<? super VariantArtifactsSpec> action);

    /**
     * Replayable hook для всех объявленных конфигураций
     */
    void configureEach(Action<? super OutgoingVariant> action);

    Optional<OutgoingVariant> findOutgoing(Variant variant);

    default OutgoingVariant requireOutgoing(Variant variant) {
        return findOutgoing(variant)
                .orElseThrow(() -> new InvalidUserDataException("Outgoing variant '" + variant + "' isn't registered"));
    }

    void whenOutgoingConfiguration(Action<? super OutgoingConfigurationSpec> action);

    void whenOutgoingSlot(Action<? super OutgoingConfigurationSlotSpec> action);


}
