<script>
  import store from "../../store.js";
  import localForage from "localforage";
  import { _ } from "svelte-i18n";
  store.init();
  import { OpenAPI, AuthService } from "@odit/lfk-client-js";
  import Footer from "../general/Footer.svelte";
  import isEmail from "validator/es/lib/isEmail";
  import Toastify from "toastify-js";
  // ------
  let username = config.default_username || "";
  let password = config.default_password || "";
  let is_blocked_by_autologin = false;
  let last_loginclick_processed = true;

  localForage.getItem("logindata", (err, value) => {
    if (value) {
      if (value.access_token && value.refresh_token) {
        is_blocked_by_autologin = true;
        OpenAPI.TOKEN = value.access_token;
        const jwtinfo = JSON.parse(atob(OpenAPI.TOKEN.split(".")[1]));
        store.login(value, jwtinfo);
        Toastify({
          text: $_("welcome_wavinghand"),
          duration: 500,
          backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
        }).showToast();
      }
    }
  });

  const login = async () => {
    // prevent login button spamming
    if (last_loginclick_processed && is_blocked_by_autologin === false) {
      last_loginclick_processed = false;
      Toastify({
        text: $_("login_is_checked"),
        duration: 500,
      }).showToast();
      let postdata = {};
      if (isEmail(username)) {
        postdata = {
          email: username,
          password,
        };
      } else {
        postdata = {
          username,
          password,
        };
      }
      AuthService.authControllerLogin(postdata)
        .then(async (result) => {
          await localForage.setItem("logindata", result);
          OpenAPI.TOKEN = result.access_token;
          const jwtinfo = JSON.parse(atob(OpenAPI.TOKEN.split(".")[1]));
          store.login(result.access_token, jwtinfo);
          location.replace("/");
          Toastify({
            text: $_("welcome_wavinghand"),
            duration: 500,
            backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
          }).showToast();
        })
        .catch((err) => {
          Toastify({
            text: $_("error_on_login"),
            duration: 500,
            backgroundColor:
              "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
          }).showToast();
        })
        .finally(() => {
          last_loginclick_processed = true;
        });
      // last login was not processed yet
    } else {
      Toastify({
        text: $_('please-wait-a-moment-your-login-is-still-being-processed'),
        duration: 1500,
        backgroundColor:
          "linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
      }).showToast();
    }
  };
  function handleKeydown(e) {
    if (e.keyCode === 13) {
      login();
    }
  }
</script>

<div
  class="min-h-screen flex items-center justify-center bg-gray-100 text-gray-900">
  <div class="max-w-md w-full py-12 px-6" role="main">
    <img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
    <p class="mt-6 text-lg text-center font-bold">{$_('application_name')}</p>
    <p class="mt-6 text-sm text-center">{$_('log_in_to_your_account')}</p>
    <div>
      <div class="rounded-md shadow-sm">
        <div>
          <!-- svelte-ignore a11y-autofocus -->
          <input
            autofocus
            aria-label={$_('email_address_or_username')}
            type="text"
            required=""
            class="border-gray-300 placeholder-gray-500 appearance-none rounded-none relative block w-full px-3 py-2 border rounded-t-md focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
            on:keydown={handleKeydown}
            placeholder={$_('email_address_or_username')}
            bind:value={username} />
        </div>
        <div class="-mt-px relative">
          <input
            aria-label={$_('password')}
            type="password"
            required=""
            bind:value={password}
            class="border-gray-300 placeholder-gray-500 appearance-none rounded-none relative block w-full px-3 py-2 border rounded-b-md focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
            on:keydown={handleKeydown}
            placeholder={$_('password')} />
        </div>
      </div>

      <div class="mt-5">
        <button
          on:click={login}
          type="submit"
          class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
          <span class="absolute left-0 inset-y pl-3">
            <svg
              class="h-5 w-5 text-gray-500"
              fill="currentColor"
              viewBox="0 0 20 20">
              <path
                fill-rule="evenodd"
                d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z"
                clip-rule="evenodd" />
            </svg>
          </span>
          {$_('log_in')}
        </button>
      </div>
    </div>
    <div class="mt-2">
      <a
        href="/forgot_password"
        class="block w-full text-center py-2 px-3 border border-gray-300 rounded-md font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm">
        {$_('forgot_password')}
      </a>
    </div>
  </div>
</div>
<Footer />
