001package fr.aumgn.dac2.config;
002
003import java.util.Arrays;
004import java.util.Iterator;
005import java.util.LinkedHashMap;
006import java.util.List;
007import java.util.Locale;
008import java.util.Map;
009
010import org.bukkit.ChatColor;
011import org.bukkit.Material;
012
013import fr.aumgn.bukkitutils.gson.GsonLoadException;
014import fr.aumgn.bukkitutils.util.Util;
015import fr.aumgn.dac2.DAC;
016
017public class Colors implements Iterable<Color> {
018
019    private final Color[] colors;
020
021    public Colors(DAC dac) {
022        Color[] colorsTmp;
023        try {
024            colorsTmp = dac.getPlugin().getGsonLoader()
025                    .loadOrCreate("colors.json", Color[].class);
026            if (colorsTmp.length < 2) {
027                dac.getLogger().severe("Unable to load colors.json. " +
028                        "Using defaults colors instead.");
029                colorsTmp = getDefaults(dac.getConfig().getLocale());
030            }
031        } catch (GsonLoadException _) {
032            colorsTmp = getDefaults(dac.getConfig().getLocale());
033            try {
034                dac.getPlugin().getGsonLoader()
035                    .write("colors.json", colorsTmp);
036            } catch (GsonLoadException __) {
037                dac.getLogger().info("Unable to write default color.json.");
038            }
039        }
040
041        colors = colorsTmp;
042    }
043
044    public boolean contains(String name) {
045        for (Color color : colors) {
046            if (color.name.equals(name)) {
047                return true;
048            }
049        }
050
051        return false;
052    }
053
054    public Color get(String name) {
055        for (Color color : colors) {
056            if (color.name.equals(name)) {
057                return color;
058            }
059        }
060
061        return null;
062    }
063
064    public Color random() {
065        return colors[Util.getRandom().nextInt(colors.length)];
066    }
067
068    public int size() {
069        return colors.length;
070    }
071
072    public List<Color> asList() {
073        return Arrays.asList(colors);
074    }
075
076    public Map<String, Color> asMap() {
077        Map<String, Color> map = new LinkedHashMap<String, Color>();
078        for (Color color : colors) {
079            map.put(color.name, color);
080        }
081
082        return map;
083    }
084
085    public Iterator<Color> iterator() {
086        return Arrays.asList(colors).iterator();
087    }
088
089    private static Color[] getDefaults(Locale locale) {
090        if (locale.getLanguage().equals(Locale.FRENCH.getLanguage())) {
091            return new Color[] {
092                    createDefault("Rouge",   ChatColor.DARK_RED,     14),
093                    createDefault("Vert",    ChatColor.DARK_GREEN,   13),
094                    createDefault("Argent",  ChatColor.GRAY,          8),
095                    createDefault("Violet",  ChatColor.DARK_PURPLE,  10),
096                    createDefault("Orange",  ChatColor.GOLD,          1),
097                    createDefault("Blanc",   ChatColor.WHITE,         0),
098                    createDefault("Jaune",   ChatColor.YELLOW,        4),
099                    createDefault("Magenta", ChatColor.RED,           2),
100                    createDefault("Gris",    ChatColor.DARK_GRAY,     7),
101                    createDefault("Citron",  ChatColor.GREEN,         5),
102                    createDefault("Rose",    ChatColor.LIGHT_PURPLE,  6),
103                    createDefault("Noir",    ChatColor.BLACK,        15)
104            };
105        }
106
107        return new Color[] {
108                createDefault("Red",     ChatColor.DARK_RED,     14),
109                createDefault("Green",   ChatColor.DARK_GREEN,   13),
110                createDefault("Silver",  ChatColor.GRAY,          8),
111                createDefault("Purple",  ChatColor.DARK_PURPLE,  10),
112                createDefault("Orange",  ChatColor.GOLD,          1),
113                createDefault("White",   ChatColor.WHITE,         0),
114                createDefault("Yellow",  ChatColor.YELLOW,        4),
115                createDefault("Magenta", ChatColor.RED,           2),
116                createDefault("Gray",    ChatColor.DARK_GRAY,     7),
117                createDefault("Lemon",   ChatColor.GREEN,         5),
118                createDefault("Pink",    ChatColor.LIGHT_PURPLE,  6),
119                createDefault("Black",   ChatColor.BLACK,        15)
120        };
121    }
122
123    private static Color createDefault(String name, ChatColor chat, int data) {
124        return new Color(name, chat, Material.WOOL, (byte) data);
125    }
126}