export default (client) => {
  return {
    fetchAll(
      tableId,
      includeFilters = false,
      includeSortings = false,
      includeDecorations = false
    ) {
      const config = {
        params: {},
      }
      const include = []

      if (includeFilters) {
        include.push('filters')
      }

      if (includeSortings) {
        include.push('sortings')
      }

      if (includeDecorations) {
        include.push('decorations')
      }

      if (include.length > 0) {
        config.params.include = include.join(',')
      }

      return client.get(`/database/views/table/${tableId}/`, config)
    },
    create(tableId, values) {
      return client.post(`/database/views/table/${tableId}/`, values)
    },
    get(
      viewId,
      includeFilters = false,
      includeSortings = false,
      includeDecorations = false
    ) {
      const config = {
        params: {},
      }
      const include = []
      if (includeFilters) {
        include.push('filters')
      }

      if (includeSortings) {
        include.push('sortings')
      }

      if (includeDecorations) {
        include.push('decorations')
      }

      if (include.length > 0) {
        config.params.include = include.join(',')
      }
      return client.get(`/database/views/${viewId}/`, config)
    },
    update(viewId, values) {
      return client.patch(`/database/views/${viewId}/`, values)
    },
    order(tableId, order) {
      return client.post(`/database/views/table/${tableId}/order/`, {
        view_ids: order,
      })
    },
    delete(viewId) {
      return client.delete(`/database/views/${viewId}/`)
    },
    fetchFieldOptions(viewId) {
      return client.get(`/database/views/${viewId}/field-options/`)
    },
    updateFieldOptions({ viewId, values }) {
      return client.patch(`/database/views/${viewId}/field-options/`, values)
    },
    rotateSlug(viewId) {
      return client.post(`/database/views/${viewId}/rotate-slug/`)
    },
    linkRowFieldLookup(slug, fieldId, page, search = null) {
      const config = {
        params: {
          page,
          size: 100,
        },
      }

      if (search !== null) {
        config.params.search = search
      }

      return client.get(
        `/database/views/${slug}/link-row-field-lookup/${fieldId}/`,
        config
      )
    },
  }
}