package net.blay09.mods.eirairc.config.settings;
import com.google.gson.JsonObject;
import net.blay09.mods.eirairc.config.property.ConfigManager;
import net.blay09.mods.eirairc.config.property.ConfigProperty;
import net.blay09.mods.eirairc.util.IRCFormatting;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.config.Configuration;
import java.util.List;
public abstract class AbstractSettings {
protected final String category;
public final ConfigManager manager = new ConfigManager();
private final AbstractSettings parent;
private Configuration dummyConfig;
public AbstractSettings(AbstractSettings parent, String category) {
this.parent = parent;
this.category = category;
if(parent != null) {
manager.setParentManager(parent.manager);
}
}
public void load(Configuration config, boolean ignoreDefaultValues) {
manager.resetProperties();
manager.load(config, ignoreDefaultValues);
}
public void save(Configuration config) {
manager.save(config);
}
public void pushDummyConfig() {
if(dummyConfig != null) {
load(dummyConfig, true);
dummyConfig = null;
}
}
public Configuration pullDummyConfig() {
dummyConfig = manager.pullDummyConfig();
return dummyConfig;
}
public void load(JsonObject object) {
manager.load(object);
}
public JsonObject toJsonObject() {
JsonObject object = new JsonObject();
manager.save(object);
return object;
}
public String handleConfigCommand(ICommandSender sender, String key) {
ConfigProperty property = manager.getProperty(key);
if(property != null) {
if(property.hasValue()) {
return property.getAsString();
} else {
return "<inherit: " + property.getAsString() + ">";
}
}
return null;
}
public boolean handleConfigCommand(ICommandSender sender, String key, String value) {
return manager.setFromString(key, value);
}
public void addOptionsToList(List<String> list, String option, boolean autoCompleteOption) {
if (autoCompleteOption) {
for(ConfigProperty property : manager.getProperties()) {
if(property.getName().startsWith(option)) {
list.add(property.getName());
}
}
} else {
ConfigProperty property = manager.getProperty(option);
if(property != null) {
if (property.get().getClass() == Boolean.class) {
list.add("true");
list.add("false");
} else if (property.get().getClass() == EnumChatFormatting.class) {
IRCFormatting.addValidColorsToList(list);
}
}
}
}
}