if vim.g.did_load_lualine_plugin then
  return
end
vim.g.did_load_lualine_plugin = true

local navic = require('nvim-navic')
navic.setup {}

---Indicators for special modes,
---@return string status
local function extra_mode_status()
  -- recording macros
  local reg_recording = vim.fn.reg_recording()
  if reg_recording ~= '' then
    return ' @' .. reg_recording
  end
  -- executing macros
  local reg_executing = vim.fn.reg_executing()
  if reg_executing ~= '' then
    return ' @' .. reg_executing
  end
  -- ix mode (<C-x> in insert mode to trigger different builtin completion sources)
  local mode = vim.api.nvim_get_mode().mode
  if mode == 'ix' then
    return '^X: (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)'
  end
  return ''
end

require('lualine').setup {
  globalstatus = true,
  sections = {
    lualine_a = { 'mode' },
    lualine_b = { 'branch', 'diff', 'diagnostics' },
    lualine_c = { "overseer" },
    -- lualine_c = {
    --    -- nvim-navic
    --   navic.get_location, cond = navic.is_available
    -- },
    lualine_x = { 'encoding', 'fileformat', 'filetype' },
    lualine_y = { 'progress' },
    lualine_z = {
      -- (see above)
      { extra_mode_status },
    },
  },
  options = {
    theme = 'catppuccin-mocha',
    -- component_separators = { left = '', right = ''},
    component_separators = { left = '', right = '' },
    -- section_separators = { left = '', right = ''},
    section_separators = { left = '', right = '' },
    ignore_focus = {
      "dapui_scopes",
      "dapui_breakpoints",
      "dapui_stacks",
      "dapui_watches",
      "dap-repl",
      "dapui_console"
    },
  },
  -- Example top tabline configuration (this may clash with other plugins)
  -- tabline = {
  --   lualine_a = {
  --     {
  --       'tabs',
  --       mode = 1,
  --     },
  --   },
  --   lualine_a = {
  --     {
  --       'buffers',
  --       show_filename_only = true,
  --       show_bufnr = true,
  --       mode = 4,
  --       filetype_names = {
  --         TelescopePrompt = 'Telescope',
  --         dashboard = 'Dashboard',
  --         fzf = 'FZF',
  --       },
  --       buffers_color = {
  --         -- Same values as the general color option can be used here.
  --         active = 'lualine_b_normal', -- Color for active buffer.
  --         inactive = 'lualine_b_inactive', -- Color for inactive buffer.
  --       },
  --     },
  --   },
  --   lualine_b = {
  --   lualine_c = {},
  --   lualine_x = {},
  --   lualine_y = {},
  --   lualine_z = {}, -- Commented out so that buffers and file path are on the same line
  -- },
  winbar = {
    lualine_a = {
      -- {
      --   "navic",
      --   color_correction = nil,
      --   navic_opts = nil
      -- }
    },
    lualine_b = {},
    lualine_c = {
      {
        'filename',
        path = 1,
        file_status = true,
        newfile_status = true,
      },
      {
        function()
          return navic.get_location()
        end,
        cond = function()
          return navic.is_available()
        end
      },
    },
    -- lualine_x = {
    --   {
    --     'filename',
    --     path = 1,
    --     file_status = true,
    --     newfile_status = true,
    --   },
    -- },
    lualine_y = {'location'},
    lualine_z = {'searchcount','selectioncount'},
  },
  extensions = { 'fugitive', 'fzf', 'toggleterm', 'quickfix' },
}