package in.twizmwaz.cardinal.module.modules.scorebox;
import in.twizmwaz.cardinal.match.Match;
import in.twizmwaz.cardinal.module.ModuleBuilder;
import in.twizmwaz.cardinal.module.ModuleCollection;
import in.twizmwaz.cardinal.module.modules.filter.FilterModule;
import in.twizmwaz.cardinal.module.modules.filter.FilterModuleBuilder;
import in.twizmwaz.cardinal.module.modules.regions.RegionModule;
import in.twizmwaz.cardinal.module.modules.regions.RegionModuleBuilder;
import in.twizmwaz.cardinal.module.modules.regions.type.combinations.UnionRegion;
import in.twizmwaz.cardinal.util.NumUtils;
import in.twizmwaz.cardinal.util.ParseUtils;
import org.bukkit.inventory.ItemStack;
import org.jdom2.Element;
import java.util.HashMap;
public class ScoreboxBuilder implements ModuleBuilder {
@Override
public ModuleCollection load(Match match) {
ModuleCollection<Scorebox> results = new ModuleCollection<>();
for (Element score : match.getDocument().getRootElement().getChildren("score")) {
for (Element box : score.getChildren("box")) {
RegionModule region = null;
if (box.getAttributeValue("region") != null) {
region = RegionModuleBuilder.getRegion(box);
} else {
ModuleCollection<RegionModule> queued = new ModuleCollection<>();
for (Element child : box.getChildren()) {
queued.add(RegionModuleBuilder.getRegion(child));
}
region = new UnionRegion(null, queued);
}
int points = 0;
if (box.getAttributeValue("points") != null) {
points = NumUtils.parseInt(box.getAttributeValue("points"));
} else if (box.getAttributeValue("value") != null) {
points = NumUtils.parseInt(box.getAttributeValue("value"));
}
FilterModule filter = null;
if (box.getAttributeValue("filter") != null) {
filter = FilterModuleBuilder.getFilter(box.getAttributeValue("filter"));
} else {
for (Element child : box.getChildren("filter")) {
filter = FilterModuleBuilder.getFilter(child);
}
}
HashMap<ItemStack, Integer> redeemables = new HashMap<>();
for (Element child : box.getChildren("redeemables")) {
for (Element item : child.getChildren("item")) {
redeemables.put(ParseUtils.getItem(item), (item.getAttributeValue("points") != null ? NumUtils.parseInt(item.getAttributeValue("points")) : (item.getAttributeValue("value") != null ? NumUtils.parseInt(item.getAttributeValue("value")) : 0)));
}
}
results.add(new Scorebox(region, points, filter, redeemables));
}
}
return results;
}
}