<!--
  The common.js file must be included before this file.

  This in an HTML Import-able file that contains the definition
  of the following elements:

    <tree-status-sk>

  This element occasionally polls the tree, displaying the status and exposing
  the active roles (sherrif, wrangler, robocop, trooper) through various
  properties.

  To use this file import it:

    <link href="/res/imp/tree-status-sk.html" rel="import" />

  Usage:

    <tree-status-sk></tree-status-sk>

  Properties:
    // input
    reload: How often (in seconds) to reload the tree status.

    // output
    sheriff: Who is the current sheriff
    wrangler: Who is the current gpu wrangler
    robocop: Who is the current android robocop
    trooper: Who is the current infra trooper
-->
<link rel="import" href="/res/imp/bower_components/iron-ajax/iron-ajax.html">

<link rel="import" href="/res/common/imp/timer-sk.html">

<dom-module id="tree-status-sk">
  <template>
    <style>
      a {
        color: inherit;
      }
      #container {
        text-align: center;
        width: 100%;
      }
      span.nowrap {
        white-space: nowrap;
      }
    </style>
    <iron-ajax
      id="status"
      auto url="https://tree-status.skia.org/current"
      handle-as="json"
      last-response="{{_bannerStatus}}">
    </iron-ajax>
    <iron-ajax
      id="sheriff"
      auto url="https://tree-status.skia.org/current-sheriff"
      handle-as="json"
      last-response="{{_sheriffStatus}}">
    </iron-ajax>
    <iron-ajax id="wrangler"
      auto url="https://tree-status.skia.org/current-wrangler"
      handle-as="json"
      last-response="{{_wranglerStatus}}">
    </iron-ajax>
    <iron-ajax id="robocop"
      auto url="https://tree-status.skia.org/current-robocop"
      handle-as="json"
      last-response="{{_robocopStatus}}">
    </iron-ajax>
    <iron-ajax id="trooper"
      auto url="https://tree-status.skia.org/current-trooper"
      handle-as="json"
      last-response="{{_trooperStatus}}">
    </iron-ajax>
    <timer-sk period="[[reload]]" on-trigger="_reload"></timer-sk>
    <div id="container">
      <span><a href="https://tree-status.skia.org" target="_blank">{{_message}}</a></span>
      <span class="nowrap">
        [{{_author}}
         {{_timeSince}} ago]
      </span>
    </div>
  </template>
  <script>
  Polymer({
    is:"tree-status-sk",

    properties: {
      // input
      reload: {
        type: Number,
        value: 60,
      },

      // output
      open: {
        type: String,
        computed: "_getStatus(_bannerStatus)",
        notify: true,
      },
      sheriff: {
        type: String,
        computed: "_getName(_sheriffStatus)",
        notify: true,
      },
      wrangler: {
        type: String,
        computed: "_getName(_wranglerStatus)",
        notify: true,
      },
      robocop: {
        type: String,
        computed: "_getName(_robocopStatus)",
        notify: true,
      },
      trooper: {
        type: String,
        computed: "_getName(_trooperStatus)",
        notify: true,
      },

      //private
      _message: {
        type: String,
        computed: "_getMessage(_bannerStatus)",
      },
      _author: {
        type: String,
        computed: "_getName(_bannerStatus)",
      },
      _timeSince: {
        type: String,
        computed: "_getTime(_bannerStatus)",
      },

      _bannerStatus: {
        type: Object
      },
      _sheriffStatus: {
        type: Object
      },
      _wranglerStatus: {
        type: Object
      },
      _robocopStatus: {
        type: Object
      },
      _trooperStatus: {
        type: Object
      },
    },

    _getMessage: function(status) {
      if (!status || !status.message) {
        return "(loading)";
      }
      return status.message;
    },

    _getName: function(status) {
      if (!status || !status.username) {
        return "(loading)";
      }
      return status.username.split("@")[0];
    },

    _getStatus: function(status) {
      if (!status || !status.general_state) {
        return "open";
      }
      return status.general_state;
    },

    _getTime: function(status) {
      if (!status || !status.date) {
        return "eons";
      }
      return sk.human.diffDate(status.date + " UTC");
    },

    _reload: function() {
      this.$.status.generateRequest();
      this.$.robocop.generateRequest();
      this.$.trooper.generateRequest();
      this.$.wrangler.generateRequest();
      this.$.sheriff.generateRequest();
    },

  });
  </script>

</dom-module>
