package org.openbakery.racecontrol.plugin.tracker;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.openbakery.jinsim.Car;
import org.openbakery.jinsim.Track;
import org.openbakery.racecontrol.data.Driver;
import org.openbakery.racecontrol.data.Lap;
import org.openbakery.racecontrol.persistence.PersistenceException;
import org.openbakery.racecontrol.persistence.ProfileHelper;
import org.openbakery.racecontrol.persistence.QueryHelper;
import org.openbakery.racecontrol.persistence.bean.Profile;
import org.openbakery.racecontrol.plugin.tracker.data.TrackerSettings;
import org.openbakery.racecontrol.service.SettingsService;
import org.openbakery.racecontrol.util.LapComparator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class TrackerService {
private static Logger log = LoggerFactory.getLogger(TrackerService.class);
private ProfileHelper profileHelper;
private QueryHelper queryHelper;
private SettingsService settingsService;
@Autowired
public void setSettingsService(SettingsService settingsService) {
this.settingsService = settingsService;
}
@Autowired
public void setProfileHelper(ProfileHelper profileHelper) {
this.profileHelper = profileHelper;
}
@Autowired
public void setQueryHelper(QueryHelper queryHelper) {
this.queryHelper = queryHelper;
}
public List<Lap> getFastestLap() throws PersistenceException {
TrackerSettings settings = settingsService.getTrackerSettings();
log.debug("trackerSettings {}", settings);
Track track = settings.getTrack();
List<Car> cars = settings.getCars();
int numberLaps = settings.getNumberLaps();
return getFastestLap(track, cars, numberLaps);
}
public List<Lap> getFastestLap(Track track, List<Car> cars, int numberLaps) throws PersistenceException {
log.debug("getFastestLap for track: {}, cars {}, numberLaps {}", track, cars, numberLaps);
List<Profile> profiles = profileHelper.getSignedUpDrivers();
ArrayList<Lap> lapList = new ArrayList<>();
for (Profile profile : profiles) {
Lap lap = queryHelper.getFastestLapOnServerForDriver(cars, track, profile.getLfsworldName(), numberLaps);
if (lap == null) {
lap = new Lap();
Driver driver = new Driver(0);
driver.setName(profile.getLfsworldName());
lap.setDriver(driver);
}
lapList.add(lap);
}
Collections.sort(lapList, new LapComparator());
int position = 1;
for (Lap lap : lapList) {
lap.setPosition(position++);
}
log.debug("lapList: {}", lapList);
return lapList;
}
public List<Profile> getSignedUpDrivers() throws PersistenceException {
return profileHelper.getSignedUpDrivers();
}
public Track getTrack() {
TrackerSettings settings = settingsService.getTrackerSettings();
return settings.getTrack();
}
}