<template>
  <div>
    <h1 class="box-title">
      <img src="@/static/img/logo.svg" alt="" />
    </h1>
    <div v-if="invalid" class="alert alert-error alert-has-icon">
      <div class="alert-icon">
        <i class="fas fa-exclamation"></i>
      </div>
      <div class="alert-title">Incorrect credentials</div>
      <p class="alert-content">
        The provided e-mail address or password is incorrect.
      </p>
    </div>
    <form @submit.prevent="login">
      <div class="control">
        <label class="control-label">E-mail address</label>
        <div class="control-elements">
          <input
            ref="email"
            v-model="credentials.email"
            :class="{ 'input-error': $v.credentials.email.$error }"
            type="email"
            class="input input-large"
            @blur="$v.credentials.email.$touch()"
          />
          <div v-if="$v.credentials.email.$error" class="error">
            Please enter a valid e-mail address.
          </div>
        </div>
      </div>
      <div class="control">
        <label class="control-label">Password</label>
        <div class="control-elements">
          <input
            ref="password"
            v-model="credentials.password"
            :class="{ 'input-error': $v.credentials.password.$error }"
            type="password"
            class="input input-large"
            @blur="$v.credentials.password.$touch()"
          />
          <div v-if="$v.credentials.password.$error" class="error">
            A password is required.
          </div>
        </div>
      </div>
      <div class="actions">
        <ul class="action-links">
          <li>
            <nuxt-link :to="{ name: 'login-signup' }">
              Sign up
            </nuxt-link>
          </li>
          <li>
            <nuxt-link :to="{ name: 'index' }">
              Index
            </nuxt-link>
          </li>
        </ul>
        <button
          :class="{ 'button-loading': loading }"
          class="button button-large"
        >
          Sign in
          <i class="fas fa-lock-open"></i>
        </button>
      </div>
    </form>
  </div>
</template>

<script>
import { required, email } from 'vuelidate/lib/validators'

export default {
  layout: 'login',
  head() {
    return {
      title: 'Login'
    }
  },
  data() {
    return {
      loading: false,
      invalid: false,
      credentials: {
        email: '',
        password: ''
      }
    }
  },
  validations: {
    credentials: {
      email: { required, email },
      password: { required }
    }
  },
  methods: {
    login() {
      this.$v.$touch()
      if (!this.$v.$invalid) {
        this.loading = true
        this.$store
          .dispatch('auth/login', {
            email: this.credentials.email,
            password: this.credentials.password
          })
          .then(() => {
            console.log('@TODO navigate to main page')
          })
          .catch(() => {
            this.invalid = true
            this.credentials.password = ''
            this.$v.$reset()
            this.$refs.password.focus()
          })
          .then(() => {
            this.loading = false
          })
      }
    }
  }
}
</script>