#!/usr/bin/env bash

# a collection of addition plugins for neovim with lazy
DEST=${1:-/etc/skel}
LAZY_DEST=${DEST}/.config/nvim/lua/plugins

conf-print() {
	cat <<-EOF

	EOF
}
# conf_print > ${DEST}

# nvim-dap Debug Adapter Protocol client
# https://microsoft.github.io/debug-adapter-protocol/implementors/adapters/
# nvim-dap-python An extension for nvim-dap for python debug, test methods or classes.
conf_print_nvim-dap() {
	cat <<-EOF
		  return {
		    {
		      "mfussenegger/nvim-dap",
		      optional = true,
		      dependencies = {
		          "mfussenegger/nvim-dap-python",
		          keys = {
		            { "<leader>dPt", function() require('dap-python').test_method() end, desc = "Debug Method", ft = "python" },
		            { "<leader>dPc", function() require('dap-python').test_class() end, desc = "Debug Class", ft = "python" },
		          },
		          config = function()
		            local path = require("mason-registry").get_package("debugpy"):get_install_path()
		            require("dap-python").setup(path .. "/venv/bin/python")
		          end,
		      },
		    }
		  }
	EOF
}

conf_print_nvim-dap >"${LAZY_DEST}/nvim-dap.lua"


# https://github.com/folke/lazy.nvim
conf-print-nvim-lazygit() {
cat <<-EOF
  require("lazy").setup({
      {
          "kdheepak/lazygit.nvim",
        cmd = {
          "LazyGit",
          "LazyGitConfig",
          "LazyGitCurrentFile",
          "LazyGitFilter",
          "LazyGitFilterCurrentFile",
        },
          -- optional for floating window border decoration
          dependencies = {
              "nvim-lua/plenary.nvim",
          },
          -- setting the keybinding for LazyGit with 'keys' is recommended in
          -- order to load the plugin when the command is run for the first time
          keys = {
            { "<leader>lg", "<cmd>LazyGit<cr>", desc = "LazyGit" }
          }
      },
  })
EOF

conf_print_nvim-lazygit >"${LAZY_DEST}/nvim-lazygit.lua"

# FIXME: Not sure where we put these settingsm assuming nvim.conf
conf_print_nvim-lazygit_map() {
  cat <<-EOF
    let g:lazygit_floating_window_winblend = 0 " transparency of floating window
    let g:lazygit_floating_window_scaling_factor = 0.9 " scaling factor for floating window
    let g:lazygit_floating_window_border_chars = ['╭','─', '╮', '│', '╯','─', '╰', '│'] " customize lazygit popup window border characters
    let g:lazygit_floating_window_use_plenary = 0 " use plenary.nvim to manage floating window if available
    let g:lazygit_use_neovim_remote = 1 " fallback to 0 if neovim-remote is not installed

    let g:lazygit_use_custom_config_file_path = 0 " config file path is evaluated if this value is 1
    let g:lazygit_config_file_path = '' " custom config file path
    " OR
    let g:lazygit_config_file_path = [] " list of custom config file paths

    " setup mapping to call :LazyGit
    nnoremap <silent> <leader>gg :LazyGit<CR>
  EOF
}

# conf_print_nvim-lazygit_map > "${LAZY_DEST}"/

# https://sw.kovidgoyal.net/kitty/overview/
# https://github.com/mikesmithgh/kitty-scrollback.nvim/wiki/kitty_scrollback_nvim
# https://github.com/mikesmithgh/kitty-scrollback.nvim?tab=readme-ov-file#-installation
conf_print_nvim-kitty-scrollback() {
  cat <<-EOF
    {
      'mikesmithgh/kitty-scrollback.nvim',
      enabled = true,
      lazy = true,
      cmd = { 'KittyScrollbackGenerateKittens', 'KittyScrollbackCheckHealth' },
      event = { 'User KittyScrollbackLaunch' },
      -- version = '*', -- latest stable version, may have breaking changes if major version changed
      -- version = '^4.0.0', -- pin major version, include fixes and features that do not have breaking changes
      config = function()
        require('kitty-scrollback').setup()
      end,
    }
  EOF
}

conf_print_nvim-kitty-scrollback >"${LAZY_DEST}/nvim-kitty-scrollback.lua"



# https://github.com/rcarriga/nvim-dap-ui
conf_print_nvim-dap-ui() {
  cat <<-EOF
    { 
      "rcarriga/nvim-dap-ui", 
      dependencies = {"mfussenegger/nvim-dap", "nvim-neotest/nvim-nio"} 
    }
  EOF
}


# the command 'Codeium Chat' will start a chat session with the default browser 
# the indexing seems not to work but it is new 02-04-2024
conf_print_nvim-codeium_enable-chat() {
  cat <<-EOF
  -- ~/.config/nvim/lua/plugins/nvim-codeium_enable-chat.lua

  -- Assuming you want to configure the codeium plugin
  return {
    "Exafunction/codeium.nvim",
    config = function()
      -- Require the codeium module
      local codeium = require("codeium.config")

      -- Modify the options to enable chat, local search, and index service
      codeium.options = {
        enable_chat = true,
        enable_local_search = true,
        enable_index_service = true,
      }

      -- Call the setup function with the modified options
      codeium.setup(codeium.options)
    end,
  }
  EOF
}

conf_print_nvim-codeium_enable-chat >"${LAZY_DEST}/nvim-codeium_enable-chat.lua"


# the key for codeium sometimes gets wiped, put it back
CODEIUM_KEY_HOME=/home/default/.cache/nvim/codeium/config.json

conf_print_nvim-codeium-key() {
  cat <<-EOF
    {"api_key": "c8cbca7c-fabb-42bb-95e2-1c86fe71bd45"}
  EOF
}


conf_print_nvim-codeium-key >"${CODEIUM_KEY_HOME}"


# an example of allowing fix on save
conf_print_nvim-lint-markdownlint() {
  cat <<-EOF
    return {
    {
      "mfussenegger/nvim-lint",
      opts = {
        linters = {
          markdownlint = {
           args = { "--fix" },
         },
        },
      },
    },
  }
  EOF
}

# conf_print_nvim-lint-markdownlint >"${LAZY_DEST}"/nvim-lint-markdownlint.lua
