local env = require("my.helpers.env")

local telescope = {
  "nvim-telescope/telescope.nvim",
  cmd = "Telescope",
  dependencies = {
    { "nvim-telescope/telescope-fzf-native.nvim", build = "make" },
    "nvim-telescope/telescope-file-browser.nvim",
    "nvim-lua/plenary.nvim"
  },
  version = "0.1.x",
  pin = true,
  cond = env.vscode.not_active(),
}

local M = telescope

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"), "[F]ind [t]ex files" },
  { "<Leader>fl", find_files_by_extension("lua"), "[F]ind [l]ua files" },
  {
    "<Leader>fp",
    find_files_by_extension("purs"),
    "[F]ind [p]urescript files",
  },
  { "<Leader>d", "diagnostics", "[D]iagnostics" },
  { "<C-F>", "live_grep", "[F]ind in project" },
  { "<C-S-F>", "file_browser", "[F]ile browser" },
  { "<Leader>t", "builtin", "[T]elescope pickers" },
}

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

  if not string.find(action, "winblend=") and env.neovide.active() then
    action = action .. " winblend=45"
  end

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

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

function telescope.config()
  local settings = {
    defaults = { mappings = { i = { ["<C-h>"] = "which_key" } } },
    pickers = { find_files = { hidden = true } },
    extensions = {
      file_browser = { path = "%:p:h" },
      fzf = {
        fuzzy = true,
        override_generic_sorter = true,
        override_file_sorter = true,
      },
    },
  }

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

return M