Source: hg/Day.js

// Copyright 2019 Campbell Crowley. All rights reserved.
// Author: Campbell Crowley (dev@campbellcrowley.com)

/**
 * @description Information about a single game day that was simulated.
 * @memberof HungryGames
 * @inner
 */
class Day {
  /**
   * @description Create a basic game day.
   * @param {number} [num] The day number.
   * @param {HungryGames~FinalEvent[]} [events] The events that will take place
   * during
   * this day.
   */
  constructor(num, events) {
    /**
     * The day number this is. (Bloodbath is 0).
     *
     * @public
     * @type {number}
     * @default
     */
    this.num = -1;
    if (typeof num === 'number' && !isNaN(num)) this.num = num;
    /**
     * The state index of this day. 0 is not yet simulated, 1 is currently
     * simulating, and 2-n are the index of the event to show if reduced by 2.
     * (2 = event #0, 3 = event #1).
     *
     * @public
     * @type {number}
     * @default
     */
    this.state = 0;
    /**
     * All events to take place during this day.
     *
     * @public
     * @type {HungryGames~FinalEvent[]}
     * @default
     */
    this.events = events || [];
  }
}

/**
 * Create a Day from an Object. Similar to copy-constructor.
 *
 * @public
 * @param {object} data Day like Object.
 * @returns {HungryGames~Day} Created Day.
 */
Day.from = function(data) {
  if (!data) return new Day();
  const evts = Array.isArray(data.events) ? data.events.slice(0) : undefined;
  const day = new Day(data.num * 1, evts);
  day.state = data.state || 0;
  return day;
};

module.exports = Day;