package com.intellectualcrafters.plot.object;
import com.intellectualcrafters.plot.config.Settings;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
public class Rating {
/**
* This is a map of the rating category to the rating value
*/
private final HashMap<String, Integer> ratingMap;
private final int initial;
private boolean changed;
public Rating(int value) {
this.initial = value;
this.ratingMap = new HashMap<>();
if (Settings.Ratings.CATEGORIES != null && Settings.Ratings.CATEGORIES.size() > 1) {
if (value < 10) {
for (String ratingCategory : Settings.Ratings.CATEGORIES) {
this.ratingMap.put(ratingCategory, value);
}
this.changed = true;
return;
}
for (String ratingCategory : Settings.Ratings.CATEGORIES) {
this.ratingMap.put(ratingCategory, value % 10 - 1);
value = value / 10;
}
} else {
this.ratingMap.put(null, value);
}
}
public List<String> getCategories() {
if (this.ratingMap.size() == 1) {
return new ArrayList<>(0);
}
return new ArrayList<>(this.ratingMap.keySet());
}
public double getAverageRating() {
double total = 0;
for (Entry<String, Integer> entry : this.ratingMap.entrySet()) {
total += entry.getValue();
}
return total / this.ratingMap.size();
}
public Integer getRating(String category) {
return this.ratingMap.get(category);
}
public boolean setRating(String category, int value) {
this.changed = true;
if (!this.ratingMap.containsKey(category)) {
return false;
}
return this.ratingMap.put(category, value) != null;
}
public int getAggregate() {
if (!this.changed) {
return this.initial;
}
if (Settings.Ratings.CATEGORIES != null && Settings.Ratings.CATEGORIES.size() > 1) {
int val = 0;
for (int i = 0; i < Settings.Ratings.CATEGORIES.size(); i++) {
val += (i + 1) * Math.pow(10, this.ratingMap.get(Settings.Ratings.CATEGORIES.get(i)));
}
return val;
} else {
return this.ratingMap.get(null);
}
}
}