<template>
  <v-container fill-height>
    <v-layout
      align-center
      justify-center
    >
      <v-dialog
        v-model="registerDialog"
        class="pa-4"
        max-width="30%"
      >
        <register-dialog @registered="registered($event)" />
      </v-dialog>
      <v-flex
        xs12
        sm12
        md10
        lg7
      >
        <img
          src="https://grady.informatik.uni-goettingen.de/static/img/brand.svg"
          class="grady-logo"
        >
      </v-flex>
      <v-divider
        vertical
        inset
        class="ma-4"
      />
      <v-flex
        text-xs-center
        xs8
        sm6
        md4
        lg2
      >
        <h2 class="pt-3">
          Log in
        </h2>
        <v-alert
          v-if="msg"
          outline
          color="error"
          :value="true"
          transition="fade-transition"
        >
          {{ msg }}
        </v-alert>
        <p v-else>
          But I corrected them, sir.
        </p>
        <v-form
          @submit.prevent="submit"
        >
          <v-text-field
            v-model="credentials.username"
            label="Username"
            required
            autofocus
          />
          <v-text-field
            v-model="credentials.password"
            label="Password"
            type="password"
            required
          />
          <v-layout class="btn-container">
            <v-btn
              id="register"
              @click="registerDialog = true"
            >
              Register
            </v-btn>
            <v-btn
              :loading="loading"
              type="submit"
              color="primary"
            >
              Access
            </v-btn>
          </v-layout>
        </v-form>
      </v-flex>
    </v-layout>
  </v-container>
</template>

<script>
import { mapActions, mapState } from 'vuex'
import RegisterDialog from '@/components/RegisterDialog'
import { Authentication as Auth } from '@/store/modules/authentication'

export default {
  name: 'GradyLogin',
  components: { RegisterDialog },
  data () {
    return {
      credentials: {
        username: '',
        password: ''
      },
      registerDialog: false,
      loading: false
    }
  },
  computed: {
    msg () { return Auth.state.message },
    userRole () { return Auth.state.user.role },
  },
  methods: {
    submit () {
      this.loading = true
      Auth.getJWT(this.credentials).then(() => {
        return Promise.all([
          Auth.getUser(),
          Auth.getJWTTimeDelta()
        ])
      }).then(() => {
        this.$router.push({ name: 'home' })
        this.loading = false
      }).catch((err) => {
        let msg = 'Login failed. Please try again.'
        if (typeof err === 'string') {
          msg = err
        }

        Auth.SET_MESSAGE(msg)
        this.loading = false
      })
    },
    registered (credentials) {
      this.registerDialog = false
      this.credentials.username = credentials.username
      this.credentials.password = credentials.password
      Auth.SET_MESSAGE('Your account is being activated. Please wait.')
    }
  }
}
</script>

<style scoped>
  .v-btn {
    margin: 0px;
  }

  .btn-container {
    display: flex;
    flex-wrap: nowrap;
    justify-content: space-around;
  }

  .grady-logo {
    width: 100%;
  }
</style>