<template>
  <b-button :type="type" v-bind="$attrs" @click="onLogIn">{{ $t(actionText) }}</b-button>
</template>

<script>
import { mapActions } from 'vuex'

import Web3Connect from './Modal'

import { detectMob } from '@/utils'

export default {
  inheritAttrs: false,
  props: {
    type: {
      type: String,
      default: 'is-primary'
    },
    actionText: {
      type: String,
      default: () => 'connect'
    }
  },
  computed: {
    hasInjectedProvider() {
      return Boolean(window.ethereum)
    }
  },
  methods: {
    ...mapActions('metamask', ['initialize']),
    async web3Connect(name) {
      this.$store.dispatch('loading/enable', {})
      try {
        await this.initialize({
          providerName: name
        })
      } catch (e) {
        console.error(e)
      }
      this.$store.dispatch('loading/disable')
    },
    onLogIn() {
      if (detectMob() && this.hasInjectedProvider) {
        this.web3Connect('mobileWallet')
        return
      }

      this.$buefy.modal.open({
        parent: this,
        component: Web3Connect,
        hasModalCard: true,
        width: 440,
        props: {
          web3Connect: this.web3Connect
        }
      })
    }
  }
}
</script>