import { getMatchCount, shuffle } from "./utils.mjs";
class Team {
constructor(player_1, player_2) {
this.player_1 = player_1;
this.player_2 = player_2;
}
print() {
console.log(this.player_1 + " and " + this.player_2);
}
render() {
return `
${this.player_1} | ${this.player_2} | `;
}
}
export class Game {
constructor(court, team_1, team_2) {
this.court_id = court.id;
this.court_status = court.status;
this.team_1 = team_1;
this.team_2 = team_2;
}
print() {
let team_1 = this.team_1.player_1 + " and " + this.team_1.player_2;
let team_2 = this.team_2.player_1 + " and " + this.team_2.player_2;
console.log(team_1 + " is playing against " + team_2);
}
render() {
let type = this.team_1.player_1 === "RESERVED" ? `class="is-danger is-light"` : ``;
return `| ${this.court_id + 1} | ${this.team_1.render()}${this.team_2.render()}
`;
}
}
export function generateDummyGames(courts) {
let team = new Team("---", "---");
let games = [];
for (const court of courts ) {
let game = new Game(court, team, team);
games.push(game);
}
return games;
}
export class Round {
constructor(number, games) {
this.number = number;
this.games = games;
}
render(description) {
let heading = typeof description !== 'undefined' ? description : "Round " + this.number;
let output = `${heading}
| Court | Team 1 | Team 2 |
`;
for (const game of this.games ) {
output += game.render()
}
output += "
";
return output;
}
}
export function proposeGames(players, courts) {
console.log("Proposing new games!");
let possibleMatches = getMatchCount(players, courts);
let requiredPlayers = possibleMatches * 4;
console.log("Required players are " + requiredPlayers);
const activeCourts = courts.filter(function (c) { return c.status });
const inactiveCourts = courts.filter(function (c) { return !c.status });
const activePlayers = players.filter(function (p) { return p.status;});
console.log("Total reserved courts are " + inactiveCourts.length + ".");
console.log("Total possible matches are " + possibleMatches + ".");
console.log("Active players are:");
console.log(activePlayers.map((i) => {return i.name;}).join(','));
const shuffledPlayers = shuffle(activePlayers);
shuffledPlayers.sort((a, b) => a.totalPlayed - b.totalPlayed);
const selectedPlayers = shuffledPlayers.slice(0, requiredPlayers);
selectedPlayers.sort((a, b) => a.level - b.level);
console.log("Selected players are:");
console.log(selectedPlayers.map((i) => {return i.name;}).join(','));
console.log("The matches are:");
let games = [];
for (let index = 0; index < possibleMatches; index++) {
const startIndex = 4 * index;
const endIndex = startIndex + 4;
const courtPlayers = selectedPlayers.slice(startIndex, endIndex);
const team_1 = new Team(courtPlayers[0].name, courtPlayers[3].name);
const team_2 = new Team(courtPlayers[1].name, courtPlayers[2].name);
const game = new Game(activeCourts[index], team_1, team_2);
game.print();
games.push(game);
}
return games;
}