package magic.ui.theme;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import javax.swing.ImageIcon;
import magic.data.GeneralConfig;
import magic.model.MagicRandom;
import magic.ui.ImageFileIO;
import magic.ui.MagicImages;
import magic.utility.MagicFileSystem;
import magic.utility.MagicFileSystem.DataPath;
import org.apache.commons.io.FileUtils;
public class AvatarImages {
private static final AvatarImages INSTANCE = new AvatarImages();
private final File avatarPath;
private String current = "";
private PlayerAvatar[] avatars;
private AvatarImages() {
avatarPath = MagicFileSystem.getDataPath(DataPath.AVATARS).toFile();
}
private static PlayerAvatar loadAvatar(final File file) {
return new PlayerAvatar(ImageFileIO.toImg(file, MagicImages.MISSING_BIG));
}
private synchronized void loadAvatars() {
final String avatar=GeneralConfig.getInstance().getAvatar();
if (!avatar.equals(current)) {
current=avatar;
final File[] files=new File(avatarPath,current).listFiles();
if (files!=null&&files.length>=2) {
Arrays.sort(files);
avatars=new PlayerAvatar[files.length];
for (int index=0;index<files.length;index++) {
avatars[index]=loadAvatar(files[index]);
}
} else {
avatars=new PlayerAvatar[2];
avatars[0]=loadAvatar(new File(""));
avatars[1]=loadAvatar(new File(""));
}
}
}
public synchronized ImageIcon getAvatarIcon(int index,final int size) {
loadAvatars();
if (index < 0) {
index = 0;
} else if (index >= avatars.length) {
index %= avatars.length;
}
return avatars[index].getIcon(size);
}
public static AvatarImages getInstance() {
return INSTANCE;
}
public static File getRandomAvatarFile() {
final Collection<File> files = FileUtils.listFiles(
MagicFileSystem.getDataPath(DataPath.AVATARS).toFile(),
new String[]{"png"},
true
);
return files.stream()
.skip(MagicRandom.nextRNGInt(files.size() - 1))
.findFirst().orElse(new File(""));
}
}