package advancedsystemsmanager.compatibility.thaumcraft.commands;
import advancedsystemsmanager.api.execution.IBuffer;
import advancedsystemsmanager.api.execution.IBufferElement;
import advancedsystemsmanager.compatibility.thaumcraft.TCCompat;
import advancedsystemsmanager.compatibility.thaumcraft.menus.MenuAspect;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.execution.buffers.Buffer;
import advancedsystemsmanager.compatibility.thaumcraft.buffer.AspectBufferElement;
import advancedsystemsmanager.flow.execution.commands.CommandInput;
import advancedsystemsmanager.flow.menus.*;
import advancedsystemsmanager.flow.setting.Setting;
import advancedsystemsmanager.reference.Names;
import advancedsystemsmanager.util.SystemCoord;
import net.minecraft.tileentity.TileEntity;
import thaumcraft.api.aspects.Aspect;
import thaumcraft.api.aspects.IAspectContainer;
import java.util.ArrayList;
import java.util.List;
public class CommandAspectInput extends CommandInput<Aspect>
{
public CommandAspectInput()
{
super(ASPECT_INPUT, Names.ASPECT_INPUT, IBuffer.ASPECT);
}
@Override
public void getMenus(FlowComponent component, List<Menu> menus)
{
menus.add(new MenuContainer(component, TCCompat.ASPECT_CONTAINER));
menus.add(new MenuAspect(component));
}
@Override
protected IBuffer getNewBuffer()
{
return new Buffer<Aspect>();
}
@Override
protected List<IBufferElement<Aspect>> getBufferSubElements(int id, List<SystemCoord> blocks, List<Menu> menus)
{
MenuAspect settings = (MenuAspect)menus.get(1);
List<Setting<Aspect>> validSettings = getValidSettings(settings.getSettings());
List<IBufferElement<Aspect>> subElements = new ArrayList<IBufferElement<Aspect>>();
for (SystemCoord block : blocks)
{
TileEntity entity = block.getTileEntity();
if (entity instanceof IAspectContainer)
{
IAspectContainer aspectContainer = (IAspectContainer)entity;
for (Aspect aspect : aspectContainer.getAspects().getAspects())
{
if (aspect == null) continue;
Setting<Aspect> setting = isValid(validSettings, aspect);
boolean whitelist = settings.isFirstRadioButtonSelected();
if ((setting == null) != whitelist)
subElements.add(new AspectBufferElement(id, aspectContainer, aspect, aspectContainer.getAspects().getAmount(aspect), setting, whitelist));
}
}
}
return subElements;
}
}