{{ define "main" }}
<h1>States</h1>
<div class="flex-row" style="justify-content:space-between;">
  <div style="min-width:240px;">
    <p>TfStated is currently managing <strong>{{ len .States }}</strong> states.</p>
    <p>Use this page to inspect the existing states.</p>
    <p>You also have the option to upload a JSON state file in order to create a new state in TfStated. This is equivalent to using the <code>state push</code> command of OpenTofu/Terraform on a brand new state.</p>
  </div>
  <form action="/states" enctype="multipart/form-data" method="post">
    <fieldset>
      <legend>New State</legend>
      <div class="grid-2">
        <label for="path">Path</label>
        <input {{ if or .PathDuplicate .PathError }}class="error"{{ end }}
               id="path"
               name="path"
               required
               type="text"
               value="{{ .Path }}">
        <label for="file" style="min-width:120px;">JSON state file</label>
        <input id="file"
               name="file"
               required
               type="file">
      </div>
      {{ if .PathDuplicate }}
      <span class="error">This path already exist.</span>
      {{ else if .PathError }}
      <span class="error">
        Path needs to be a valid
        <span class="tooltip">
          absolute
          <span class="tooltip-text">
            URL path is considered absolute when it starts with a <code>/</code> character.
          </span>
        </span>
        and
        <span class="tooltip">
          clean
          <span class="tooltip-text">
            A URL path is considered clean when it has no relative path elements like <code>../</code>, repeated <code>//</code> and when it does not end with a <code>/</code>.
          </span>
        </span>
        URL path.
      </span>
      {{ end }}
      <div style="align-self:stretch; display:flex; justify-content:flex-end;">
        <button class="primary" type="submit" value="submit">Upload and Create State</button>
      </div>
    </fieldset>
  </form>
</div>
<article>
  <table style="width:100%;">
    <thead>
      <tr>
        <th>Path</th>
        <th>Updated</th>
        <th>Locked</th>
      </tr>
    </thead>
    <tbody>
      {{ range .States }}
      <tr>
        <td><a href="/states/{{ .Id }}">{{ .Path }}</a></td>
        <td>{{ .Updated }}</td>
        <td style="text-align:center;">
          {{ if eq .Lock nil }}
          unlocked
          {{ else }}
          <span class="tooltip">
            locked
            <span class="tooltip-text">
              {{ .State.Lock }}
            </span>
          </span>
          {{ end }}
        </td>
      </tr>
      {{ end }}
    </tbody>
  </table>
</article>
{{ end }}