import FieldService from '@baserow/modules/database/services/field'
import { notifyIf } from '@baserow/modules/core/utils/error'

export default {
  computed: {
    // Indicates if the cell is currently being generated together with other cells in
    // bulk via the apposite grid-view menu.
    generating() {
      return this.isGenerating(this.$parent, this.$props)
    },
    modelAvailable() {
      return this.isModelAvailable(this.$parent, this.$props)
    },
  },
  methods: {
    isGenerating(parent, props) {
      return parent.row._.pendingFieldOps?.find(
        (fieldName) => fieldName === `field_${props.field.id}`
      )
    },
    isModelAvailable(parent, props) {
      const aIModels =
        parent.$store.getters['settings/get'].generative_ai[
          props.field.ai_generative_ai_type
        ] || []
      return (
        parent.$registry.get('field', props.field.type).isEnabled() &&
        aIModels.includes(props.field.ai_generative_ai_model)
      )
    },
    async generate() {
      const rowId = this.$parent.row.id
      this.$store.dispatch(
        this.storePrefix + 'view/grid/setPendingFieldOperations',
        { fieldId: this.field.id, rowIds: [rowId], value: true }
      )
      try {
        await FieldService(this.$client).generateAIFieldValues(this.field.id, [
          rowId,
        ])
      } catch (error) {
        notifyIf(error, 'field')
        this.$store.dispatch(
          this.storePrefix + 'view/grid/setPendingFieldOperations',
          { fieldId: this.field.id, rowIds: [rowId], value: false }
        )
      }
    },
  },
}