<template lang="pug">
  transition(:duration="400")
    .modal(v-show='isShown', v-cloak)
      transition(name='modal-background')
        .modal-background(v-show='isShown')
      .modal-container
        transition(name='modal-content')
          .modal-content(v-show='isShown')
            header.is-blue
              span {{ $t('modal.createusertitle') }}
              p.modal-notify(:class='{ "is-active": isLoading }'): i
            section
              label.label {{ $t('modal.createuseremail') }}
              p.control.is-fullwidth
                input.input(type='text', :placeholder='$t("modal.createuseremailplaceholder")', v-model='email', ref='createUserEmailInput')
            section
              label.label {{ $t('modal.createuserprovider') }}
              p.control.is-fullwidth
                select(v-model='provider')
                  option(value='local') Local Database
                  option(value='windowslive') Microsoft Account
                  option(value='google') Google ID
                  option(value='facebook') Facebook
                  option(value='github') GitHub
                  option(value='slack') Slack
            section(v-if='provider=="local"')
              label.label {{ $t('modal.createuserpassword') }}
              p.control.is-fullwidth
                input.input(type='password', placeholder='', v-model='password')
            section(v-if='provider=="local"')
              label.label {{ $t('modal.createusername') }}
              p.control.is-fullwidth
                input.input(type='text', :placeholder='$t("modal.createusernameplaceholder")', v-model='name')
            footer
              a.button.is-grey.is-outlined(@click='cancel') {{ $t('modal.discard') }}
              a.button(@click='create', v-if='provider=="local"', :disabled='isLoading', :class='{ "is-disabled": isLoading, "is-blue": !loading }') {{ $t('modal.createuser') }}
              a.button(@click='create', v-if='provider!="local"', :disabled='isLoading', :class='{ "is-disabled": isLoading, "is-blue": !loading }') {{ $t('modal.createuserauthorize') }}
</template>

<script>
export default {
  name: 'modal-create-user',
  data() {
    return {
      email: '',
      provider: 'local',
      password: '',
      name: '',
      isLoading: false
    }
  },
  computed: {
    isShown() {
      return this.$store.state.modalCreateUser.shown
    }
  },
  methods: {
    init() {
      let self = this
      self._.delay(() => {
        self.$refs.createUserEmailInput.focus()
      }, 100)
    },
    cancel() {
      this.$store.dispatch('modalCreateUser/close')
      this.email = ''
      this.provider = 'local'
    },
    create() {
      let self = this
      this.isLoading = true
      this.$http.post('/admin/users/create', {
        email: this.email,
        provider: this.provider,
        password: this.password,
        name: this.name
      }).then(resp => {
        return resp.json()
      }).then(resp => {
        this.isLoading = false
        if (resp.ok) {
          this.cancel()
          window.location.reload(true)
        } else {
          self.$store.dispatch('alert', {
            style: 'red',
            icon: 'square-cross',
            msg: resp.msg
          })
        }
      }).catch(err => {
        this.isLoading = false
        self.$store.dispatch('alert', {
          style: 'red',
          icon: 'square-cross',
          msg: 'Error: ' + err.body.msg
        })
      })
    }
  },
  mounted() {
    this.$root.$on('modalCreateUser/init', this.init)
  }
}
</script>
