package net.olemartin.engine;
import com.google.common.collect.Lists;
import net.olemartin.domain.Match;
import net.olemartin.domain.Player;
import java.util.ArrayList;
import java.util.List;
public class RoundRobinEngine implements TournamentEngine {
private final ArrayList<Player> players;
private List<Player> list1 = new ArrayList<>();
private List<Player> list2 = new ArrayList<>();
private int sublistSize;
public RoundRobinEngine(Iterable<Player> players) {
this.players = Lists.newArrayList(players);
sublistSize = this.players.size() / 2;
}
void rotateLists(int round) {
Player pivot = players.get(0);
List move = players.subList(players.size() - round, players.size());
List stand = players.subList(1, players.size() - round);
List finale = new ArrayList<>();
finale.add(pivot);
finale.addAll(move);
finale.addAll(stand);
list1 = finale.subList(0, sublistSize);
list2 = Lists.reverse(finale.subList(sublistSize, finale.size()));
}
@Override
public List<Player> getPlayers() {
return players;
}
@Override
public List<Match> round(int round) {
rotateLists(round -1);
List<Match> matches = new ArrayList<>();
for (int i = 0; i < list1.size(); i++) {
matches.add(new Match(list1.get(i), list2.get(i)));
}
return matches;
}
}