package com.gettingmobile.goodnews.tip;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TipManager {
public static final int TIP_UNGROUPED = 0;
public static final int NO_TIPS = -1;
private final TipStatusStorage storage;
private final List<Tip> tips = new ArrayList<Tip>();
private final Map<String, Tip> tipsById = new HashMap<String, Tip>();
private final Map<Integer, List<Tip>> groups = new HashMap<Integer, List<Tip>>();
public TipManager(TipStatusStorage storage) {
this.storage = storage;
}
public void addTip(Integer groupId, Tip tip) {
tips.add(tip);
tipsById.put(tip.getId(), tip);
List<Tip> group = groups.get(groupId);
if (group == null) {
group = new ArrayList<Tip>();
groups.put(groupId, group);
}
group.add(tip);
}
public Tip getTip(String tipId) {
return tipsById.get(tipId);
}
protected List<Tip> filterTips(List<Tip> tips, boolean unshownOnly, int flags) {
final List<Tip> matchingTips = new ArrayList<Tip>();
if (unshownOnly) {
flags |= Tip.FLAG_AUTOMATIC;
}
if (tips != null) {
for (Tip tip : tips) {
if (tip.hasFlags(flags) && (!unshownOnly || !storage.wasTipShown(tip.getId()))) {
matchingTips.add(tip);
}
}
}
return matchingTips;
}
public List<Tip> getTips(int flags) {
if (flags == 0) {
return tips;
} else {
return filterTips(tips, false, flags);
}
}
public List<Tip> getGroup(Integer groupId, boolean unshownOnly, int flags) {
return filterTips(groups.get(groupId), unshownOnly, flags);
}
public void setTipShown(Tip tip) {
storage.setTipShown(tip.getId());
}
}