import { getMatchCount, shuffle } from "./utils.mjs"; class Team { constructor(playerOne, playerTwo) { this.playerOne = playerOne; this.playerTwo = playerTwo; } print() { console.log(this.playerOne + " and " + this.playerTwo); } render() { return `${this.playerOne}${this.playerTwo}`; } } export class Game { constructor(court, team_1, team_2) { this.courtId = court.id; this.team_1 = team_1; this.team_2 = team_2; } print() { let team_1 = this.team_1.playerOne + " and " + this.team_1.playerTwo; let team_2 = this.team_2.playerOne + " and " + this.team_2.playerTwo; console.log(team_1 + " is playing against " + team_2); } render() { let type = this.team_1.playerOne === "RESERVED" ? `class="is-danger is-dark"` : ``; // type = this.team_1.playerOne === "---" ? `class="is-warning is-dark"` : ``; return `${this.courtId + 1}${this.team_1.render()}${this.team_2.render()}`; } } export function generateDummyGames(courts, description) { let team = new Team(description, description); let games = []; for (const court of courts ) { let game = new Game(court, team, team); games.push(game); } return games; } export class Round { constructor(games, number) { this.games = games; this.description = typeof number === 'undefined' ? "Proposal" : "Round " + number; } render() { let output = ``; for (const game of this.games ) { output += game.render() } output += "
${this.description}
CourtTeam 1Team 2
"; 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 = generateDummyGames(activeCourts.slice(possibleMatches + 1), "---"); games = games.concat(generateDummyGames(inactiveCourts, "RESERVED")); 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); } games.sort((a, b) => a.courtId - b.courtId); return games; }