package tc.oc.pgm.logging;
import net.kencochrane.raven.event.EventBuilder;
import tc.oc.minecraft.logging.BetterRaven;
import tc.oc.pgm.map.MapDefinition;
import tc.oc.pgm.map.MapLogRecord;
import tc.oc.pgm.match.Match;
import tc.oc.pgm.map.PGMMap;
import tc.oc.pgm.match.MatchManager;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.LogRecord;
import java.util.stream.Collectors;
public class MapTagger implements BetterRaven.Helper {
private final MatchManager matchManager;
public MapTagger(MatchManager matchManager) {
this.matchManager = matchManager;
}
@Override
public void helpBuildingEvent(EventBuilder eventBuilder, LogRecord record) {
if(record == null) return;
// During match cycle, multiple matches (and maps) can be loaded,
// and that is a popular time for errors to happen.
Set<MapDefinition> maps = new HashSet<>();
if(record instanceof MapLogRecord) {
MapLogRecord mapRecord = (MapLogRecord) record;
maps.add(mapRecord.getMap());
eventBuilder.setCulprit(mapRecord.getLocation());
}
if(matchManager != null) {
maps.addAll(matchManager.currentMatches().stream().map(Match::getMap).collect(Collectors.toList()));
}
int i = 0;
for(MapDefinition map : maps) {
String suffix = maps.size() == 1 ? "" : String.valueOf(i);
eventBuilder.addTag("pgm_map_path" + suffix, map.getFolder().getAbsolutePath().toString());
eventBuilder.addTag("pgm_map_name" + suffix, map.getName());
if(map instanceof PGMMap && map.isLoaded()) {
eventBuilder.addTag("pgm_map_version" + suffix, ((PGMMap) map).getInfo().version.toString());
}
}
}
}