package appeng.api.features;


import com.google.common.base.Optional;
import net.minecraft.item.ItemStack;

import javax.annotation.Nonnull;
import java.util.List;


/**
 * Registration Records for {@link IInscriberRegistry}
 * <p>
 * You have to pay attention though, that recipes are not mirrored,
 * where the top and bottom slots are switching places.
 * <p>
 * This is applied on runtime.
 *
 * @author thatsIch
 * @version rv2
 * @since rv2
 */
public interface IInscriberRecipe
{
	/**
	 * the current inputs
	 *
	 * @return inputs the inscriber will accept
	 */
	@Nonnull
	List<ItemStack> getInputs();

	/**
	 * gets the current output
	 *
	 * @return output that the recipe will produce
	 */
	@Nonnull
	ItemStack getOutput();

	/**
	 * gets the top optional
	 *
	 * @return item which is used top
	 */
	@Nonnull
	Optional<ItemStack> getTopOptional();

	/**
	 * gets the bottom optional
	 *
	 * @return item which is used bottom
	 */
	@Nonnull
	Optional<ItemStack> getBottomOptional();

	/**
	 * type of inscriber process
	 *
	 * @return type of process the inscriber is doing
	 */
	@Nonnull
	InscriberProcessType getProcessType();
}
