<%- include("partials/shared_header", { title: "Create User - OAI Reverse Proxy Admin" }) %>

<style>
  #temporaryUserOptions {
    margin-top: 1em;
    max-width: 30em;
  }
  
  #temporaryUserOptions h3 {
    margin-bottom: -0.4em;
  }

  input[type="number"] {
    max-width: 10em;
  }

  .temporary-user-fieldset {
    display: grid;
    grid-template-columns: repeat(4, 1fr); /* Four equal-width columns */
    column-gap: 1em;
    row-gap: 0.2em;
  }

  .full-width {
    grid-column: 1 / -1;
  }

  .quota-label {
    text-align: right;
  }
</style>

<h1>Create User Token</h1>
<p>User token types:</p>
<ul>
  <li><strong>Normal</strong> - Standard users.
  <li><strong>Special</strong> - Exempt from token quotas and <code>MAX_IPS_PER_USER</code> enforcement.</li>
  <li><strong>Temporary</strong> - Disabled after a specified duration. Quotas never refresh.</li>
</ul>
  
<form action="/admin/manage/create-user" method="post">
  <input type="hidden" name="_csrf" value="<%= csrfToken %>" />
  <label for="type">Type</label>
  <select name="type">
    <option value="normal">Normal</option>
    <option value="special">Special</option>
    <option value="temporary">Temporary</option>
  </select>
  <input type="submit" value="Create" />
  <fieldset id="temporaryUserOptions" style="display: none">
    <legend>Temporary User Options</legend>
    <div class="temporary-user-fieldset">
      <p class="full-width">
        Temporary users will be disabled after the specified duration, and their records will be deleted 72 hours after that.
        These options apply only to new
        temporary users; existing ones use whatever options were in effect when they were created.
      </p>
      <label for="temporaryUserDuration" class="full-width">Access duration (in minutes)</label>
      <input type="number" name="temporaryUserDuration" id="temporaryUserDuration" value="60" class="full-width" />
      <!-- convenience calculations -->
      <span>6 hours:</span><code>360</code>
      <span>12 hours:</span><code>720</code>
      <span>1 day:</span><code>1440</code>
      <span>1 week:</span><code>10080</code>
      <h3 class="full-width">Token Quotas</h3>
      <p class="full-width">Temporary users' quotas are never refreshed.</p>
      <% Object.entries(quota).forEach(function([model, tokens]) { %>
      <label class="quota-label" for="temporaryUserQuota_<%= model %>"><%= model %></label>
      <input
        type="number"
        name="temporaryUserQuota_<%= model %>"
        id="temporaryUserQuota_<%= model %>"
        value="0"
        data-fieldtype="tokenquota"
        data-default="<%= tokens %>" />
      <% }) %>
    </div>
  </fieldset>
</form>
<% if (newToken) { %>
<p>Just created <code><%= recentUsers[0].token %></code>.</p>
<% } %>
<h2>Recent Tokens</h2>
<ul>
  <% recentUsers.forEach(function(user) { %>
  <li><a href="/admin/manage/view-user/<%= user.token %>"><%= user.token %></a></li>
  <% }) %>
</ul>

<script>
  const typeInput = document.querySelector("select[name=type]");
  const temporaryUserOptions = document.querySelector("#temporaryUserOptions");
  typeInput.addEventListener("change", function () {
    localStorage.setItem("admin__create-user__type", typeInput.value);
    if (typeInput.value === "temporary") {
      temporaryUserOptions.style.display = "block";
    } else {
      temporaryUserOptions.style.display = "none";
    }
  });

  function loadDefaults() {
    const defaultType = localStorage.getItem("admin__create-user__type");
    if (defaultType) {
      typeInput.value = defaultType;
      typeInput.dispatchEvent(new Event("change"));
    }

    const durationInput = document.querySelector("input[name=temporaryUserDuration]");
    const defaultDuration = localStorage.getItem("admin__create-user__duration");
    durationInput.addEventListener("change", function () {
      localStorage.setItem("admin__create-user__duration", durationInput.value);
    });
    if (defaultDuration) {
      durationInput.value = defaultDuration;
    }

    const tokenQuotaInputs = document.querySelectorAll("input[data-fieldtype=tokenquota]");
    tokenQuotaInputs.forEach(function (input) {
      const defaultQuota = localStorage.getItem("admin__create-user__quota__" + input.id);
      input.addEventListener("change", function () {
        localStorage.setItem("admin__create-user__quota__" + input.id, input.value);
      });
      if (defaultQuota) {
        input.value = defaultQuota;
      }
    });
  }

  loadDefaults();
</script>

<%- include("partials/admin-footer") %>

src/admin/web/views/admin_create-user.ejs