<html>
<head>
  <title>taskspec-popup-sk demo</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
  <script src="/res/common/js/common.js"></script>
  <script src="/res/imp/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <script src="/res/imp/sinon-1.17.2.js"></script>
  <script type="text/javascript">
    var server = sinon.fakeServer.create();
    server.autoRespond = true;

    var comments = [{
      flaky: false,
      id: "0",
      ignoreFailure: true,
      message: "Example Comment",
      time: "Mon Sep 25 2017 07:50:06 GMT-0400 (EDT)",
      user: "you@google.com",
    }];
    var repo = "skia";
    var swarming_url = "https://chromium-swarm.appspot.com";
    var taskSpecName = "Build-Mac-Clang-x86_64-Debug";

    function update(request, newComments) {
      var popup = document.getElementById("popup");
      popup.set("task_spec.comments", newComments);
      comments = newComments;
      return request.respond(200, {});
    }

    server.respondWith("POST", "/json/"+repo+"/taskSpecs/"+taskSpecName+"/comments", function(request) {
      var comment = JSON.parse(request.requestBody);
      comment.id = "" + comments.length;
      comment.message = comment.comment;
      comment.time = new Date().toString();
      comment.user = "you@google.com";
      comments.push(comment);
      var newComments = [];
      for (var i = 0; i < comments.length; i++) {
        newComments.push(comments[i]);
      }
      return update(request, newComments);
    });
    var deleteCommentUrl = new RegExp("\/json\/" + repo + "\/taskSpecs\/" + taskSpecName + "\/comments\/\\d+");
    server.respondWith("DELETE", deleteCommentUrl, function(request) {
      var split = request.url.split("/");
      var commentId = parseInt(split[split.length-1]);
      var newComments = [];
      for (var i = 0; i < comments.length; i++) {
        if (comments[i].id != commentId) {
          newComments.push(comments[i]);
        }
      }
      return update(request, newComments);
    });

    // Mock out login to fake that a user is logged in
    sk.Login = {
      then: function(f){
        f({
          "Email":"test@google.com",
        });
      }
    };
  </script>
  <link rel=import href="taskspec-popup-sk.html">
</head>
<body>
  <h1>taskspec-popup-sk demo</h1>
  <taskspec-popup-sk id="popup"></taskspec-popup-sk>
  <script type="text/javascript">
    var popup = document.getElementById("popup");
    popup.addEventListener("reload", function() {
      popup.show();
    });
    popup.repo = repo;
    popup.swarming_url = swarming_url;
    popup.set("task_spec", {
      name: taskSpecName,
      comments: comments,
    });
    popup.show();
  </script>
</body>
</html>
