package com.asteria.utility.json;
import java.util.Arrays;
import java.util.Objects;
import java.util.OptionalInt;
import com.asteria.game.GameConstants;
import com.asteria.game.item.Item;
import com.asteria.game.item.ItemDefinition;
import com.asteria.game.shop.Currency;
import com.asteria.game.shop.Shop;
import com.asteria.utility.JsonLoader;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
/**
* The {@link JsonLoader} implementation that loads all shops.
*
* @author lare96 <http://github.com/lare96>
*/
public final class ShopLoader extends JsonLoader {
/**
* Creates a new {@link ShopLoader}.
*/
public ShopLoader() {
super("./data/json/shops/shops.json");
}
@Override
public void load(JsonObject reader, Gson builder) {
String name = Objects.requireNonNull(reader.get("name").getAsString());
Item[] items = Objects.requireNonNull(builder.fromJson(reader.get("items").getAsJsonArray(), Item[].class));
boolean restock = reader.get("restock").getAsBoolean();
boolean sellItems = reader.get("can-sell-items").getAsBoolean();
Currency currency = Objects.requireNonNull(Currency.valueOf(reader.get("currency").getAsString()));
Shop shop = new Shop(name, items, restock, sellItems, currency);
OptionalInt op = Arrays.stream(GameConstants.INVALID_SHOP_ITEMS).filter(shop.getContainer()::contains).findFirst();
if (op.isPresent())
throw new IllegalStateException("Item not allowed in shops: " + ItemDefinition.DEFINITIONS[op.getAsInt()].getName());
if (Shop.SHOPS.containsKey(name))
throw new IllegalStateException("Duplicate shop name: " + name);
Shop.SHOPS.put(name, shop);
}
}