/*
* IDK Game Server by Steve Winfield
* https://github.com/WinfieldSteve
*/
package org.stevewinfield.suja.idk.game.miscellaneous;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class MoodlightData {
private boolean enabled;
private int currentPreset;
private final Map<Integer, MoodlightPreset> presets;
public boolean isEnabled() {
return enabled;
}
public int getCurrentPreset() {
return currentPreset;
}
public Map<Integer, MoodlightPreset> getPresets() {
return presets;
}
public void setCurrentPreset(final int preset) {
this.currentPreset = preset;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
public MoodlightData(final boolean enabled, final int currentPreset, final Map<Integer, MoodlightPreset> presets) {
this.enabled = enabled;
this.currentPreset = currentPreset;
this.presets = presets;
}
public String getFlagData() {
String flagData = (enabled ? "1" : "0") + "|" + currentPreset + "|";
for (int i = 1; i <= 3; i++) {
final MoodlightPreset preset = presets.get(i);
if (i > 1) {
flagData += ";";
}
flagData += i + "," + preset.getColorCode() + "," + preset.getColorIntensity() + "," + (preset.isOnlyBackground() ? "1" : "0");
}
return flagData;
}
public String getDisplayData() {
MoodlightPreset currentPreset = new MoodlightPreset("#000000", false, 255);
if (presets.containsKey(this.currentPreset)) {
currentPreset = presets.get(this.currentPreset);
}
return (enabled ? "2" : "1") + "," + this.currentPreset + "," + (currentPreset.isOnlyBackground() ? "2" : "1") + "," + currentPreset.getColorCode() + "," + currentPreset.getColorIntensity();
}
public static MoodlightData getInstance(final String itemFlags) {
boolean enabled = false;
int currentPreset = 1;
final Map<Integer, MoodlightPreset> presets = new ConcurrentHashMap<>();
for (int i = 1; i <= 3; i++) {
presets.put(i, new MoodlightPreset("#000000", false, 255));
}
final String[] majors = itemFlags.split("\\|");
if (majors.length == 3) {
enabled = (majors[0].equals("1"));
currentPreset = Integer.valueOf(majors[1]);
final String[] minors = majors[2].split(";");
if (minors.length == 3) {
presets.clear();
for (final String minor : minors) {
final String[] bits = minor.split(",");
final int num = Integer.valueOf(bits[0]);
final String colorCode = bits[1];
final int colorIntensity = Integer.valueOf(bits[2]);
final boolean backgroundOnly = (bits[3].equals("1"));
presets.put(num, new MoodlightPreset(colorCode, backgroundOnly, colorIntensity));
}
}
}
return new MoodlightData(enabled, currentPreset, presets);
}
public static boolean isValidColor(final String colorCode) {
switch (colorCode) {
case "#000000":
case "#0053F7":
case "#EA4532":
case "#82F349":
case "#74F5F5":
case "#E759DE":
case "#F2F851":
return true;
default:
return false;
}
}
}