import { parseHookProps } from "../lib/attribute";

const UPDATE_INTERVAL_MS = 100;

/**
 * A hook used to display a counting timer.
 *
 * ## Props
 *
 *   * `start` - the timestamp to count from
 *
 */
const Timer = {
  mounted() {
    this.props = this.getProps();

    this.interval = setInterval(() => this.updateDOM(), UPDATE_INTERVAL_MS);
  },

  updated() {
    this.props = this.getProps();
    this.updateDOM();
  },

  destroyed() {
    clearInterval(this.interval);
  },

  getProps() {
    return parseHookProps(this.el, ["start"]);
  },

  updateDOM() {
    const elapsedMs = Date.now() - new Date(this.props.start);
    const elapsedSeconds = elapsedMs / 1_000;

    this.el.innerHTML = `${elapsedSeconds.toFixed(1)}s`;
  },
};

export default Timer;
