/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

import { assign } from '@ember/polyfills';
import ApplicationAdapter from './application';
import { task } from 'ember-concurrency';
import { inject as service } from '@ember/service';

export default ApplicationAdapter.extend({
  store: service(),
  namespace: 'v1',
  urlForItem() {},
  dynamicApiPath: '',

  getDynamicApiPath: task(function* (id) {
    // TODO: remove yield at some point.
    const result = yield this.store.peekRecord('auth-method', id);
    this.dynamicApiPath = result.apiPath;
    return;
  }),

  fetchByQuery: task(function* (store, query, isList) {
    const { id } = query;
    const data = {};
    if (isList) {
      data.list = true;
      yield this.getDynamicApiPath.perform(id);
    }

    return this.ajax(this.urlForItem(id, isList, this.dynamicApiPath), 'GET', { data }).then((resp) => {
      const data = {
        id,
        method: id,
      };
      return assign({}, resp, data);
    });
  }),

  query(store, type, query) {
    return this.fetchByQuery.perform(store, query, true);
  },

  queryRecord(store, type, query) {
    return this.fetchByQuery.perform(store, query);
  },
});
