<template>
  <v-stepper-content step="2">
    <v-card>
      <v-card-text class="pa-0">
        <v-form>
          <h4 class="text-h6">Set parameters</h4>
          <p class="font-weight-regular body-1">
            You can set parameters to fetch API response.
          </p>
          <template v-for="item in value">
            <v-text-field
              v-if="item.type === 'textField'"
              :key="item.name"
              v-model="item.value"
              :label="item.name"
              outlined
            />
            <v-select
              v-if="item.type === 'selectField'"
              :key="item.name"
              v-model="item.value"
              :items="item.items"
              :label="item.name"
              outlined
            />
            <object-field
              v-if="item.type === 'objectField'"
              :key="item.name"
              v-model="item.value"
              :title="item.name"
            />
          </template>
          <h4 class="text-h6">Test the parameters</h4>
          <p class="font-weight-regular body-1">
            Before proceeding, you need to test the parameters whether they can fetch API response.
            Please input sample text and press the <strong>Test</strong> button.
          </p>
          <v-text-field
            v-if="project.isTextProject"
            v-model="payload"
            outlined
            label="Sample Text"
          />
          <file-field
            v-else
            v-model="payload"
          />
          <v-alert
            v-for="(error, index) in errorMessages"
            :key="index"
            prominent
            type="error"
          >
            <v-row align="center">
              <v-col class="grow">
                {{ error }}
              </v-col>
            </v-row>
          </v-alert>
          <h4 class="text-h6">
            Response
          </h4>
          <v-sheet
            :dark="!$vuetify.theme.dark"
            :light="$vuetify.theme.dark"
            class="mb-5 pa-5"
          >
            <pre>{{ JSON.stringify(response, null, 4) }}</pre>
          </v-sheet>
        </v-form>
      </v-card-text>
      <v-card-actions class="pa-0">
        <v-spacer />
        <v-btn
          text
          class="text-capitalize"
          @click="$emit('prev')"
        >
          Prev
        </v-btn>
        <v-btn
          v-show="!isPassed"
          color="primary"
          class="text-capitalize"
          @click="$emit('onTest', payload)"
        >
          Test
        </v-btn>
        <v-btn
          v-show="isPassed"
          color="primary"
          class="text-capitalize"
          @click="$emit('next')"
        >
          Next
        </v-btn>
      </v-card-actions>
    </v-card>
  </v-stepper-content>
</template>

<script lang="ts">
import Vue from 'vue'
import ObjectField from './ObjectField.vue'
import FileField from './FileField.vue'

export default Vue.extend({
  components: {
    ObjectField,
    FileField,
  },

  props: {
    value: {
      type: Array,
      default: () => [],
      required: true
    },
    errorMessages: {
      type: Array,
      default: () => [],
      required: true
    },
    isPassed: {
      type: Boolean,
      default: false,
      required: true
    },
    response: {
      type: [String, Array, Object],
      default: () => [],
      required: true
    }
  },

  data() {
    return {
      payload: '',
      project: {}
    }
  },

  async created() {
    this.project = await this.$services.project.findById(this.$route.params.id)
  }
})
</script>