export const buildDatasourceEndpoints = API => ({
  /**
   * Gets a list of datasources.
   */
  getDatasources: async () => {
    return await API.get({
      url: "/api/datasources",
    })
  },

  /**
   * Prompts the server to build the schema for a datasource.
   * @param datasourceId the datasource ID to build the schema for
   */
  buildDatasourceSchema: async datasourceId => {
    return await API.post({
      url: `/api/datasources/${datasourceId}/schema`,
    })
  },

  /**
   * Creates a datasource
   * @param datasource the datasource to create
   * @param fetchSchema whether to fetch the schema or not
   */
  createDatasource: async ({ datasource, fetchSchema }) => {
    return await API.post({
      url: "/api/datasources",
      body: {
        datasource,
        fetchSchema,
      },
    })
  },

  /**
   * Updates a datasource
   * @param datasource the datasource to update
   */
  updateDatasource: async datasource => {
    return await API.put({
      url: `/api/datasources/${datasource._id}`,
      body: datasource,
    })
  },

  /**
   * Deletes a datasource.
   * @param datasourceId the ID of the ddtasource to delete
   * @param datasourceRev the rev of the datasource to delete
   */
  deleteDatasource: async ({ datasourceId, datasourceRev }) => {
    return await API.delete({
      url: `/api/datasources/${datasourceId}/${datasourceRev}`,
    })
  },
})
