aboutsummaryrefslogtreecommitdiff
path: root/src/data.js
blob: 3e133ee38e19b38d3338b49cab509be9561c9ed0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
class Switch {
  constructor(id, status) {
    this.id = id;
    this.status = typeof status !== "undefined" ? status : false;
    this.description = this.constructor.name;
    this.name = this.description + " " + (id + 1);
  }
  toggle() {
    this.status = !this.status;
    this.print();
  }
  print() {
    let status = this.status ? "active" : "inactive";
    console.log(this.name + " is currently " + status);
  }
  render() {
    let color = this.status ? `` : `class="outline secondary"`;
    let id = this.description + "_" + this.id;
    return `<button id=${id} ${color}>${this.name}</button>`;
  }
}

export class Court extends Switch {
  constructor(id, status) {
    super(id, status);
  }
}

export class Regular extends Switch {
  constructor(id, status, level, games, firstName, lastName) {
    super(id, status);
    this.level = typeof level !== "undefined" ? level : 1;
    this.games = typeof games !== "undefined" ? games : 0;
    this.firstName =
      typeof firstName !== "undefined" ? firstName : this.description;
    this.lastName = typeof lastName !== "undefined" ? lastName : this.id + 1;
    this.name = this.firstName + " " + this.lastName;
  }
}

const guestCategories = {
  0: { description: "Beginner", level: 1 },
  1: { description: "Novice", level: 3 },
  2: { description: "Intermediate", level: 6 },
};

export class Guest extends Switch {
  maxCount = 6;
  categoryCount = 3;

  constructor(id, status, games) {
    super(id, status);
    const categoryId = Math.floor(id / this.maxCount) || 0;
    this.level = guestCategories[categoryId].level;
    this.games = typeof games !== "undefined" ? games : 0;
    const guestNumber = (id % this.maxCount) + 1;
    this.firstName = guestCategories[categoryId].description;
    this.lastName = guestNumber;
    this.name = this.firstName + " " + this.lastName;
  }
}

function renderPlayerName(player) {
  return `<strong>${player.firstName}</strong> ${player.lastName}`;
}

export class Team {
  constructor(playerOne, playerTwo) {
    this.playerOne = playerOne;
    this.playerTwo = playerTwo;
  }
  print() {
    console.log("Team consists of:");
    this.playerOne.print();
    this.playerTwo.print();
  }
  render() {
    const p1 = renderPlayerName(this.playerOne);
    const p2 = renderPlayerName(this.playerTwo);
    return p1 + `<br/><br/>` + p2;
  }
}

export class Game extends Switch {
  constructor(id, status, teamOne, teamTwo) {
    super(id, status);
    this.teamOne = teamOne;
    this.teamTwo = teamTwo;
  }
  print() {
    const teamOne =
      this.teamOne.playerOne.firstName +
      " and " +
      this.teamOne.playerTwo.firstName;
    const teamTwo =
      this.teamTwo.playerOne.firstName +
      " and " +
      this.teamTwo.playerTwo.firstName;
    console.log(
      "Game " + this.id + ": " + teamOne + " is playing against " + teamTwo
    );
  }
  render() {
    const blockedState = this.teamOne.playerOne.firstName === "RESERVED";
    const playerState = this.teamOne.render() + "<hr>" + this.teamTwo.render();
    const type = blockedState ? `<h5>Reserved</p>` : playerState;
    return `<article>
      <h4>Court ${this.id + 1}</h4><hr>
      ${type}
    </article>`;
  }
}