<template>
  <div>
    <Error :error="error" />
    <WebhookForm
      ref="form"
      :table="table"
      :default-values="webhook"
      @submitted="submit"
      @formchange="handleFormChange"
    >
      <div class="actions">
        <a
          class="button button--primary button--error"
          @click="$refs.deleteWebhookModal.show()"
        >
          {{ $t('action.delete') }}
        </a>
        <div class="align-right">
          <p v-if="saved" class="color-success">
            <strong>{{ $t('webhook.successfullyUpdated') }}</strong>
          </p>
          <button
            v-if="!saved"
            class="button button--primary"
            :class="{ 'button--loading': loading }"
            :disabled="loading"
          >
            {{ $t('action.save') }}
          </button>
        </div>
      </div>
      <DeleteWebhookModal
        ref="deleteWebhookModal"
        :webhook="webhook"
        @deleted="$emit('deleted', $event)"
      />
    </WebhookForm>
  </div>
</template>

<script>
import error from '@baserow/modules/core/mixins/error'
import WebhookForm from '@baserow/modules/database/components/webhook/WebhookForm'
import DeleteWebhookModal from '@baserow/modules/database/components/webhook/DeleteWebhookModal'
import WebhookService from '@baserow/modules/database/services/webhook'

const {
  ResponseErrorMessage,
} = require('@baserow/modules/core/plugins/clientHandler')

export default {
  name: 'UpdateWebhook',
  components: { WebhookForm, DeleteWebhookModal },
  mixins: [error],
  props: {
    table: {
      type: Object,
      required: true,
    },
    webhook: {
      type: Object,
      required: true,
    },
  },
  data() {
    return {
      loading: false,
      saved: false,
    }
  },
  methods: {
    handleFormChange() {
      this.saved = false
    },
    async submit(values) {
      this.hideError()
      this.loading = true

      try {
        const { data } = await WebhookService(this.$client).update(
          this.webhook.id,
          values
        )
        this.saved = true
        this.$emit('updated', data)

        setTimeout(() => {
          this.saved = false
        }, 5000)
      } catch (error) {
        this.handleError(error, 'webhook', null, {
          url: {
            invalid_url: new ResponseErrorMessage(
              this.$t('webhook.form.invalidURLTitle'),
              this.$t('webhook.form.invalidURLDescription')
            ),
          },
        })
      }

      this.loading = false
    },
  },
}
</script>