{{ template "page/head_start" .}}
{{ template "page/head_end" .}}

{{ template "page/body_start" .}}
<a-layout id="app" v-cloak :class="themeSwitcher.currentTheme + ' login-app'">
  <transition name="list" appear>
  <a-layout-content class="under min-h-100vh">
      <div class="waves-header">
        <div class="waves-inner-header"></div>
        <svg class="waves" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
          viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
          <defs>
            <path id="gentle-wave" d="M-160 44c30 0 58-18 88-18s 58 18 88 18 58-18 88-18 58 18 88 18 v44h-352z" />
          </defs>
          <g class="parallax">
            <use xlink:href="#gentle-wave" x="48" y="0" fill="rgba(0, 135, 113, 0.08)" />
            <use xlink:href="#gentle-wave" x="48" y="3" fill="rgba(0, 135, 113, 0.08)" />
            <use xlink:href="#gentle-wave" x="48" y="5" fill="rgba(0, 135, 113, 0.08)" />
            <use xlink:href="#gentle-wave" x="48" y="7" fill="#c7ebe2" />
          </g>
        </svg>
      </div>
  <a-row type="flex" justify="center" align="middle" class="h-100 overflow-hidden-auto">
        <a-col :xs="22" :sm="12" :md="10" :lg="8" :xl="6" :xxl="5" id="login" class="my-3rem">
          <template v-if="!loadingStates.fetched">
            <div class="text-center">
              <a-spin size="large" />
            </div>
          </template>
          <template v-else>
            <div class="setting-section">
              <a-popover :overlay-class-name="themeSwitcher.currentTheme" title='{{ i18n "menu.settings" }}'
                placement="bottomRight" trigger="click">
                <template slot="content">
                  <a-space direction="vertical" :size="10">
                    <a-theme-switch-login></a-theme-switch-login>
                    <span>{{ i18n "pages.settings.language" }}</span>
                    <a-select ref="selectLang" class="w-100" v-model="lang"
                      @change="LanguageManager.setLanguage(lang)" :dropdown-class-name="themeSwitcher.currentTheme">
                      <a-select-option :value="l.value" label="English" v-for="l in LanguageManager.supportedLanguages">
                        <span role="img" aria-label="l.name" v-text="l.icon"></span>
                        &nbsp;&nbsp;<span v-text="l.name"></span>
                      </a-select-option>
                    </a-select>
                  </a-space>
                </template>
                <a-button shape="circle" icon="setting"></a-button>
              </a-popover>
            </div>
            <a-row type="flex" justify="center">
              <a-col :style="{ width: '100%' }">
                <h2 class="title headline zoom">
                  <span class="words-wrapper">
                    <b class="is-visible">{{ i18n "pages.login.hello" }}</b>
                    <b>{{ i18n "pages.login.title" }}</b>
                  </span>
                </h2>
              </a-col>
            </a-row>
            <a-row type="flex" justify="center">
              <a-col span="24">
                <a-form @submit.prevent="login">
                  <a-space direction="vertical" size="middle">
                    <a-form-item>
                      <a-input autocomplete="username" name="username" v-model.trim="user.username"
                        placeholder='{{ i18n "username" }}' autofocus required>
                        <a-icon slot="prefix" type="user" class="fs-1rem"></a-icon>
                      </a-input>
                    </a-form-item>
                    <a-form-item>
                      <a-input-password autocomplete="password" name="password" v-model.trim="user.password"
                        placeholder='{{ i18n "password" }}' required>
                        <a-icon slot="prefix" type="lock" class="fs-1rem"></a-icon>
                      </a-input-password>
                    </a-form-item>
                    <a-form-item v-if="twoFactorEnable">
                      <a-input autocomplete="one-time-code" name="twoFactorCode" v-model.trim="user.twoFactorCode"
                        placeholder='{{ i18n "twoFactorCode" }}' required>
                        <a-icon slot="prefix" type="key" class="fs-1rem"></a-icon>
                      </a-input>
                    </a-form-item>
                    <a-form-item>
                      <a-row justify="center" class="centered">
                        <div class="wave-btn-bg wave-btn-bg-cl h-50px mt-1rem" :style="loadingStates.spinning ? 'width: 52px' : 'display: inline-block'">
                          <a-button class="ant-btn-primary-login" type="primary" :loading="loadingStates.spinning"
                            :icon="loadingStates.spinning ? 'poweroff' : undefined" html-type="submit">
                            [[ loadingStates.spinning ? '' : '{{ i18n "login" }}' ]]
                          </a-button>
                        </div>
                      </a-row>
                    </a-form-item>
                  </a-space>
                </a-form>
              </a-col>
            </a-row>
          </template>
        </a-col>
      </a-row>
    </a-layout-content>
  </transition>
</a-layout>
{{template "page/body_scripts" .}}
{{template "component/aThemeSwitch" .}}
<script>
  const app = new Vue({
    delimiters: ['[[', ']]'],
    el: '#app',
    data: {
      themeSwitcher,
      loadingStates: {
        fetched: false,
        spinning: false
      },
      user: {
        username: "",
        password: "",
        twoFactorCode: ""
      },
      twoFactorEnable: false,
      lang: ""
    },
    async mounted() {
      this.lang = LanguageManager.getLanguage();
      this.twoFactorEnable = await this.getTwoFactorEnable();
    },
    methods: {
      async login() {
        this.loadingStates.spinning = true;

        const msg = await HttpUtil.post('/login', this.user);

        if (msg.success) {
          location.href = basePath + 'panel/';
        }

        this.loadingStates.spinning = false;
      },
      async getTwoFactorEnable() {
        const msg = await HttpUtil.post('/getTwoFactorEnable');

        if (msg.success) {
          this.twoFactorEnable = msg.obj;
          this.loadingStates.fetched = true;

          return msg.obj;
        }
      },
    },
  });

  document.addEventListener("DOMContentLoaded", function () {
    var animationDelay = 2000;
    initHeadline();

    function initHeadline() {
      animateHeadline(document.querySelectorAll('.headline'));
    }

    function animateHeadline(headlines) {
      var duration = animationDelay;
      headlines.forEach(function (headline) {
        setTimeout(function () {
          hideWord(headline.querySelector('.is-visible'));
        }, duration);
      });
    }

    function hideWord(word) {
      var nextWord = takeNext(word);
      switchWord(word, nextWord);
      setTimeout(function () {
        hideWord(nextWord);
      }, animationDelay);
    }

    function takeNext(word) {
      return word.nextElementSibling ? word.nextElementSibling : word.parentElement.firstElementChild;
    }

    function switchWord(oldWord, newWord) {
      oldWord.classList.remove('is-visible');
      oldWord.classList.add('is-hidden');
      newWord.classList.remove('is-hidden');
      newWord.classList.add('is-visible');
    }
  });
</script>
{{ template "page/body_end" .}}