<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport"
    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500&display=swap" rel="stylesheet" />
  <style>
    body {
      background: #f5f8fa;
      font-family: 'Ubuntu', sans-serif;
      font-weight: 400;
      line-height: 1.25em;
      margin: 0;
      font-size: 16px;
      color: #454b52;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    .login-page {
      width: 360px;
      padding: 8% 0 0;
      margin: auto;
    }

    .form {
      position: relative;
      z-index: 1;
      background: #FFFFFF;
      max-width: 360px;
      margin: 0 auto 100px;
      padding: 45px;
      text-align: center;
      box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
    }

    .form input {
      font-family: inherit;
      outline: 0;
      background: #f2f2f2;
      width: 100%;
      border: 0;
      margin: 0 0 15px;
      padding: 15px;
      box-sizing: border-box;
      font-size: 14px;
    }

    .form button {
      font-family: inherit;
      text-transform: uppercase;
      outline: 0;
      background: hsl(217, 22%, 24%);
      width: 100%;
      border: 0;
      padding: 15px;
      color: #FFFFFF;
      font-size: 14px;
      -webkit-transition: all 0.3 ease;
      transition: all 0.3 ease;
      cursor: pointer;
    }

    .form button:hover,
    .form button:active,
    .form button:focus {
      background: hsl(217, 22%, 28%);
    }

    .form .message {
      margin: 15px 0 0;
      color: #b3b3b3;
      font-size: 12px;
    }

    .form .message a {
      color: hsl(217, 22%, 24%);
      text-decoration: none;
    }

    .container {
      position: relative;
      z-index: 1;
      max-width: 300px;
      margin: 0 auto;
    }

    .container:before,
    .container:after {
      content: "";
      display: block;
      clear: both;
    }

    .container .info {
      margin: 50px auto;
      text-align: center;
    }

    .container .info h1 {
      margin: 0 0 15px;
      padding: 0;
      font-size: 36px;
      font-weight: 300;
      color: #1a1a1a;
    }

    .container .info span {
      color: #4d4d4d;
      font-size: 12px;
    }

    .container .info span a {
      color: #000000;
      text-decoration: none;
    }

    .container .info span .fa {
      color: #EF3B3A;
    }

    #error-message {
      display: none;
      color: #EF3B3A;
      margin-bottom: 0.5rem;
    }
  </style>
  <title>R7 Queue Dashboard</title>
</head>

<body>
  <div class="login-page">
    <div class="form">
      <div id="error-message">Invalid username or password.</div>
      <form class="login-form" id="loginForm" method="post" action="./login" onsubmit="return handleSubmit(this)">
        <input type="text" name="username" placeholder="Username" />
        <input type="password" name="password" placeholder="Password" />
        <button>Login</button>
      </form>
    </div>
  </div>

  <script>
    function handleSubmit(form) {
      const url = form.action;
      const method = form.method;
      const username = form.username.value;
      const password = form.password.value;
      const errorMessage = document.getElementById('error-message')
      if (!username || !password) {
        return false;
      }

      errorMessage.style.display = 'none';

      fetch(url, {
        method: method.toUpperCase(),
        headers: { 'content-type': 'application/json' },
        body: JSON.stringify({ username, password })
      }).then((res) =>
        res.status !== 200 ? Promise.reject(res.json()) : res.json()
      )
        .then(res => res.error ? Promise.reject(res.error) : res)
        .then(({ url }) => {
          window.location = url
        })
        .catch(() => {
          errorMessage.style.display = 'block'
        })

      return false
    }
  </script>
</body>

</html>