vim.o.timeout = true
vim.o.timeoutlen = 500

-- buffer
require("which-key").register({
  b = {
    name = "buffer",
    b = { "<cmd>Telescope buffers<cr>", "List buffers" },
    d = { "<cmd>bd<cr>", "Delete buffer" },
  },
}, { prefix = "<leader>" })
require("which-key").register({
  ["["] = {
    b = { "<cmd>bprevious<cr>", "Previous buffer" },
  },
  ["]"] = {
    b = { "<cmd>bnext<cr>", "Next buffer" },
  },
})

-- window
require("which-key").register({
  w = {
    name = "window",
    ["|"] = { "<C-w>v", "Split window horizontally" },
    ["-"] = { "<C-w>s", "Split window vertically" },
    w = { "<C-w>w", "Switch window" },
    d = { "<C-w>c", "Delete window" },
  },
}, { prefix = "<leader>" })

-- tab
require("which-key").register({
  ["<tab>"] = {
    name = "tab",
    ["<tab>"] = { "<cmd>tabnew<cr>", "New tab" },
    n = { "<cmd>tabnext<cr>", "Next tab" },
    p = { "<cmd>tabprevious<cr>", "Previous tab" },
    d = { "<cmd>tabclose<cr>", "Close tab" },
  },
}, { prefix = "<leader>" })

-- file
require("which-key").register({
  f = {
    name = "file/find",
    n = { "<cmd>enew<cr>", "New file" },
  },
}, { prefix = "<leader>" })

-- better descriptions for navigation
require("which-key").register({
  ["<leader>"] = {
    f = { name = "file/find" },
    g = { name = "git" },
    l = { name = "lsp" },
    o = { name = "org" },
    s = { name = "search" },
    t = { name = "toggle" },
    x = { name = "diagnostics/quickfix" },
  },
  ["["] = { name = "prev" },
  ["]"] = { name = "next" },
  g = { name = "goto" },
})

-- Clear search with <esc>
require("which-key").register({
  ["<esc>"] = { "<cmd>noh<cr><esc>", "Escape and clear hlsearch", mode = { "n", "i" } },
})

-- better indenting
require("which-key").register({
  ["<"] = { "<gv", "Shift left" },
  [">"] = { ">gv", "Shift right" },
}, { mode = "v" })
