

<%--suppress CheckValidXmlInScriptTagBody --%>
<%@ include file="/include.jsp" %>
<%@ page import="jetbrains.buildServer.queueManager.PluginConstants" %>
<%@ page import="jetbrains.buildServer.queueManager.settings.Actor" %>
<%@ page import="jetbrains.buildServer.web.util.WebUtil" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<c:set var="PARAM_NEW_QUEUE_STATE" value="<%=PluginConstants.WEB.PARAM_NEW_QUEUE_STATE%>"/>
<c:set var="PARAM_STATE_CHANGE_REASON" value="<%=PluginConstants.WEB.PARAM_STATE_CHANGE_REASON%>"/>
<c:set var="QUEUE_ACTIONS_URL" value="<%=PluginConstants.WEB.QUEUE_ACTIONS_URL%>"/>
<c:set var="ACTOR_USER" value="<%=Actor.USER%>"/>

<jsp:useBean id="queueState" scope="request" type="jetbrains.buildServer.queueManager.settings.QueueState"/>
<c:set var="queueIsActive" value="${queueState.queueEnabled}"/>

<c:choose>
  <c:when test="${queueIsActive}">
    <c:set var="switchQueueStateActionText" value="Pause Build Queue"/>
  </c:when>
  <c:otherwise>
    <c:set var="switchQueueStateActionText" value="Resume Build Queue"/>
  </c:otherwise>
</c:choose>

<c:url var="actionUrl" value="${QUEUE_ACTIONS_URL}"/>

<c:set var="isSakuraPlugin" value="${not empty param.pluginUIContext}"/>

<bs:refreshable containerId="pause-build-queue" pageUrl="${pageUrl}">
  <script type="text/javascript">
    BS.ChangeQueueStateDialog = OO.extend(BS.AbstractWebForm, OO.extend(BS.AbstractModalDialog, {
      formElement: function() {
        return $('changeQueueStateForm');
      },

      getContainer: function() {
        return $('changeQueueStateFormDialog');
      },

      showDialog: function() {
        this.formElement().${PARAM_STATE_CHANGE_REASON}.value = this.formElement().${PARAM_STATE_CHANGE_REASON}.defaultValue;
        this.showCentered();
        this.formElement().${PARAM_STATE_CHANGE_REASON}.focus();
        this.formElement().${PARAM_STATE_CHANGE_REASON}.select();

        var dialogTitle;
        var dialogSubmitButtonTitle;
        <c:choose>
        <c:when test="${queueIsActive}">
        dialogTitle = "Pause build queue";
        dialogSubmitButtonTitle = "Pause";
        </c:when>
        <c:otherwise>
        dialogTitle = "Resume build queue";
        dialogSubmitButtonTitle = "Resume";
        </c:otherwise>
        </c:choose>

        $j("#ChangeQueueStateSubmitButton").prop('value', dialogSubmitButtonTitle);
        $j("#changeQueueStateFormTitle").html(dialogTitle);

        this.bindCtrlEnterHandler(this.submit.bind(this));

        return false;
      },

      submit: function() {
        var val = this.formElement().${PARAM_STATE_CHANGE_REASON}.value;
        var defaultVal = this.formElement().${PARAM_STATE_CHANGE_REASON}.defaultValue;
        if (val === defaultVal) {
          val = '';
        }
        this.formElement().${PARAM_STATE_CHANGE_REASON}.value = val;
        BS.FormSaver.save(BS.ChangeQueueStateDialog, BS.ChangeQueueStateDialog.formElement().action, OO.extend(BS.SimpleListener, {
          onCompleteSave: function(form, responseXML, err) {
            if (${isSakuraPlugin}) {
              // for some reason, wait reasons don't update right away, therefore the delay
              setTimeout(() => ReactUIPromise.then(ReactUI => ReactUI.updateQueue()), 500);
              var container = document.getElementById('pause-build-queue');
              if (container != null) {
                container.refresh();
              }
              var healthItems = document.getElementById('globalHealthItems');
              if (healthItems != null) {
                healthItems.refresh();
              }
              BS.ChangeQueueStateDialog.close();
            } else {
              BS.reload(true);
            }
          }
          // todo: onFailure or onException
        }));
        return false;
      }
    }));
  </script>

  <c:if test="${queueState.actor eq ACTOR_USER || queueState.queueEnabled}">
    <c:choose>
      <c:when test="${isSakuraPlugin}">
        <ring:button onclick="BS.ChangeQueueStateDialog.showDialog();">${switchQueueStateActionText}</ring:button>
      </c:when>
      <c:otherwise>
        <script>
          $j('.quickLinks').append('<a href="#" class="quickLinksItem" onclick="BS.ChangeQueueStateDialog.showDialog();">${switchQueueStateActionText}</a>');
        </script>
      </c:otherwise>
    </c:choose>
  </c:if>

  <bs:modalDialog formId="changeQueueStateForm"
                  title="Disable queue"
                  action="${actionUrl}"
                  closeCommand="BS.ChangeQueueStateDialog.close();"
                  saveCommand="BS.ChangeQueueStateDialog.submit()">
    <label for="${PARAM_STATE_CHANGE_REASON}">Reason:</label>
    <textarea id="${PARAM_STATE_CHANGE_REASON}"
              name="${PARAM_STATE_CHANGE_REASON}"
              rows="3" cols="46" class="commentTextArea"
              onkeyup="if (this.value.length > 140) this.value = this.value.substring(0, 140)"
              onfocus="if (this.value == this.defaultValue) this.value = ''"
              onblur="if (this.value == '') this.value='&lt;your comment here&gt;'">&lt;your comment here&gt;</textarea>
    <input type="hidden" name="${PARAM_NEW_QUEUE_STATE}" value="${not queueIsActive}">
    <div class="popupSaveButtonsBlock">
      <forms:submit  label="Save" id="ChangeQueueStateSubmitButton"/>
      <forms:cancel onclick="BS.ChangeQueueStateDialog.close()"/>
      <forms:saving/>
    </div>
  </bs:modalDialog>
</bs:refreshable>