local arpeggio = require("my.plugins.arpeggio")

local M = {}

local function find_files_by_extension(extension)
  return "find_files find_command=rg,--files,--glob=**/*." .. extension
end

local function with_theme(base, theme)
  return base .. " theme=" .. theme
end

local defaultTheme = "ivy"

local keybinds = {
  { "<C-P>", "find_files", "Find files" },
  { "<Leader>ft", find_files_by_extension("tex"), "Find tex files" },
  { "<Leader>fl", find_files_by_extension("lua"), "Find lua files" },
  { "<Leader>fp", find_files_by_extension("purs"), "Find purescript files" },
  { "<Leader>d", "diagnostics", "Diagnostics" },
  { "<C-F>", "live_grep", "Search in project" },
  { "<Leader>t", "builtin", "Show builtin pickers" },
}

local chords = {
  { "jp", "file_browser" }
}

local function mkAction(action)
  if not string.find(action, "theme=") then
    action = with_theme(action, defaultTheme)
  end

  return ":Telescope " .. action .. "<cr>"
end

local function setupKeybinds()
  for _, mapping in pairs(keybinds) do
    vim.keymap.set("n", mapping[1], mkAction(mapping[2]), { desc = mapping[3] })
  end

  for _, mapping in pairs(chords) do
    arpeggio.chord("n", mapping[1], mkAction(mapping[2]))
  end
end

function M.setup()
  setupKeybinds()

  local settings = {
    defaults = { mappings = { i = { ["<C-h>"] = "which_key" } } },
    pickers = { find_files = { hidden = true } },
    extensions = {
      file_browser = {
        path = "%:p:h"
      }
    }
  }

  require("telescope").setup(settings)
  require("telescope").load_extension "file_browser"
end

return M