{% extends "limited_width.html.j2" %}

{% block page_content %}
<div class="col s12">
  <h3>Submit a Test</h3>
</div>

<div class="col s12">
  <div class="card">
    <form class="nopaque-form" data-loading-modal="test-progress-modal" id="test-form">
      {{ test_form.hidden_tag() }}
      <div class="card-content">
        <div class="row">
          <div class="col s12 m4">
            <div class="input-field">
              <i class="material-icons prefix">title</i>
              {{ test_form.title(class='validate', data_length='32') }}
              {{ test_form.title.label }}
            </div>
          </div>
          <div class="col s12 m8">
            <div class="input-field">
              <i class="material-icons prefix">description</i>
              {{ test_form.description(class='validate', data_length='255') }}
              {{ test_form.description.label }}
            </div>
          </div>
          <div class="col s12">
            <div class="file-field input-field">
              <div class="btn">
                <span>{{ test_form.file.label.text }}</span>
                {{ test_form.file() }}
              </div>
              <div class="file-path-wrapper">
                <input class="file-path validate" type="text">
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="card-action right-align">
        <button class="btn waves-effect waves-light" name="submit" type="submit">Submit<i class="material-icons right">send</i></button>
      </div>
    </form>
  </div>
</div>

<div class="modal" id="test-progress-modal">
  <div class="modal-content">
    <h4>Waiting for data transfer</h4>
    <div class="progress">
      <div class="indeterminate"></div>
    </div>
  </div>
</div>

<script>
var testFormElement = document.forms.namedItem("test-form");

nopaque.socket.on("submit-test-form", function(response) {
  let loadingModalElement = document.getElementById(testFormElement.dataset.loadingModal);
  if (response.status === 201) {
    testFormElement.reset();
    for (let helperText of testFormElement.querySelectorAll(".helper-text")) {
      helperText.remove();
    }
    nopaque.toast("Success!");
  } else if (response.status === 400) {
    let errorElement;
    for (let [field, error] of Object.entries(response.msg)) {
      errorElement = document.createElement("span");
      errorElement.classList.add("helper-text", "red-text");
      errorElement.innerText = error;
      testFormElement.querySelector(`input[name="${field}"]`).closest(".input-field").appendChild(errorElement);
    }
  }
  M.Modal.getInstance(loadingModalElement).close();
});
</script>
{% endblock %}