package net.uomc.mineshaft.resources; import java.sql.SQLException; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import org.json.JSONObject; import com.mouldycheerio.dbot.util.DatabaseUtils; import com.mouldycheerio.dbot.util.PeelingUtils; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Member; public class Resource extends JSONObject { private static final String SYMBOL = "symbol"; private static final String NAME = "name"; private static final String VALUE = "value"; private ResourceManager resourceManager; private String tableName; public Resource(String name, String symbol, long value, ResourceManager resourceManager) { super(); setName(name); setSymbol(symbol); setValue(value); this.resourceManager = resourceManager; initDB(); } public Resource(JSONObject jsonObject, ResourceManager resourceManager) { super(); this.resourceManager = resourceManager; jsonObject.keySet().forEach(k -> put(k, jsonObject.get(k))); initDB(); } public void initDB() { tableName = getName().split(" ")[0]; try { DatabaseUtils.createSimpleKVtable(resourceManager.getDatabasepath(), tableName); } catch (SQLException e) { // e.printStackTrace(); } } public void set(Member member, long value) { try { DatabaseUtils.putInKVtable(resourceManager.getDatabasepath(), tableName, member.getId() + ":" + member.getGuild().getId(), value); } catch (SQLException e) { e.printStackTrace(); } } public long get(Member member) { try { return DatabaseUtils.getInKVtable(resourceManager.getDatabasepath(), tableName, member.getId() + ":" + member.getGuild().getId()); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public long getValue(String memberid, String guildId) { try { return DatabaseUtils.getInKVtable(resourceManager.getDatabasepath(), tableName, memberid + ":" + guildId); } catch (SQLException e) { e.printStackTrace(); } return 0l; } public long total() { try { return DatabaseUtils.getTotal(resourceManager.getDatabasepath(), tableName); } catch (SQLException e) { e.printStackTrace(); } return 0; } public List getMembersGuilds() { try { return DatabaseUtils.listKeys(resourceManager.getDatabasepath(), tableName); } catch (SQLException e) { e.printStackTrace(); } return Collections.emptyList(); } public List getMembers(Guild guild) { return getMembersGuilds().stream().filter(m -> guild.getId().equals(m.split(":")[1])).map(m -> m.split(":")[0]).collect(Collectors.toList()); } public void increment(Member member, long amount) { set(member, get(member) + amount); } public String getName() { return getString(NAME); } public String getPrettyName() { return Arrays.stream(getString(NAME).replaceAll("_", " ").split("\\s+")) .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1)) .collect(Collectors.joining(" ")); } public void setName(String name) { put(NAME, name); } public String getSymbol() { return getString(SYMBOL); } public void setSymbol(String symbol) { put(SYMBOL, symbol); } public long getValue() { if (total() <= 0 || resourceManager.getPrimaryResource().total() <= 0) { return -1; } else { return resourceManager.getPrimaryResource().total() / total(); } } public void setValue(long value) { put(VALUE, value); } public String prettyValue(long value) { return PeelingUtils.amountToString(value) + getSymbol(); } @Override public String toString() { return getName(); } }