local api = vim.api

local Config = require("avante.config")

local M = {
  TITLE = "AvanteTitle",
  REVERSED_TITLE = "AvanteReversedTitle",
  SUBTITLE = "AvanteSubtitle",
  REVERSED_SUBTITLE = "AvanteReversedSubtitle",
  THIRD_TITLE = "AvanteThirdTitle",
  REVERSED_THIRD_TITLE = "AvanteReversedThirdTitle",
}

M.input_ns = api.nvim_create_namespace("avante_input")
M.hint_ns = api.nvim_create_namespace("avante_hint")

M.setup = function()
  local normal = api.nvim_get_hl(0, { name = "Normal" })
  local normal_float = api.nvim_get_hl(0, { name = "NormalFloat" })

  local has_set_colors = {}
  for _, hl_group in ipairs({
    M.TITLE,
    M.REVERSED_TITLE,
    M.SUBTITLE,
    M.REVERSED_SUBTITLE,
    M.THIRD_TITLE,
    M.REVERSED_THIRD_TITLE,
  }) do
    has_set_colors[hl_group] = api.nvim_get_hl(0, { name = hl_group }) ~= vim.empty_dict()
  end

  if Config.behaviour.auto_set_highlight_group then
    if not has_set_colors[M.TITLE] then
      api.nvim_set_hl(0, M.TITLE, { fg = "#1e222a", bg = "#98c379" })
    end
    if not has_set_colors[M.REVERSED_TITLE] then
      api.nvim_set_hl(0, M.REVERSED_TITLE, { fg = "#98c379" })
    end
    if not has_set_colors[M.SUBTITLE] then
      api.nvim_set_hl(0, M.SUBTITLE, { fg = "#1e222a", bg = "#56b6c2" })
    end
    if not has_set_colors[M.REVERSED_SUBTITLE] then
      api.nvim_set_hl(0, M.REVERSED_SUBTITLE, { fg = "#56b6c2" })
    end
    if not has_set_colors[M.THIRD_TITLE] then
      api.nvim_set_hl(0, M.THIRD_TITLE, { fg = "#ABB2BF", bg = "#353B45" })
    end
    if not has_set_colors[M.REVERSED_THIRD_TITLE] then
      api.nvim_set_hl(0, M.REVERSED_THIRD_TITLE, { fg = "#353B45" })
    end
  end

  api.nvim_set_hl(M.hint_ns, "NormalFloat", { fg = normal_float.fg, bg = normal_float.bg })

  api.nvim_set_hl(M.input_ns, "NormalFloat", { fg = normal_float.fg, bg = normal_float.bg })
  api.nvim_set_hl(M.input_ns, "FloatBorder", { fg = normal.fg, bg = normal.bg })
end

return M