local format = require("copilot_cmp.format")
local util = require("copilot.util")
local api = require("copilot.api")

local methods = {
  opts = {
    fix_pairs = true,
  }
}

methods.getCompletionsCycling = function (self, params, callback)
  local respond_callback = function(err, response)

    if err or not response or not response.completions then
      return callback({isIncomplete = false, items = {}})
    end

    local items = vim.tbl_map(function(item)
      return format.format_item(item, params.context, methods.opts)
    end, vim.tbl_values(response.completions))

    return callback({
      isIncomplete = false,
      items = items
    })
  end

  api.get_completions_cycling(self.client, util.get_doc_params(), respond_callback)
  return callback({isIncomplete = true, items = {}})
end

methods.init = function (completion_method, opts)
  methods.opts.fix_pairs = opts.fix_pairs
  return methods[completion_method]
end

return methods