-- Bearded Arc colorscheme
-- Accurate port from NvChad base46 theme with proper highlight group mappings

vim.cmd("hi clear")
if vim.fn.exists("syntax_on") then
  vim.cmd("syntax reset")
end

vim.o.background = "dark"
vim.g.colors_name = "bearded-arc"

-- Base 30 color palette (UI colors)
local base_30 = {
  white = "#ABB7C1",
  darker_black = "#19212e",
  black = "#1c2433",
  black2 = "#232b3a",
  one_bg = "#262e3d",
  one_bg2 = "#303847",
  one_bg3 = "#3a4251",
  grey = "#444c5b",
  grey_fg = "#4e5665",
  grey_fg2 = "#58606f",
  light_grey = "#626a79",
  red = "#FF738A",
  baby_pink = "#F38CEC",
  pink = "#ee9cdd",
  line = "#303847",
  green = "#3CEC85",
  vibrant_green = "#9bdead",
  nord_blue = "#6da4cd",
  blue = "#69C3FF",
  yellow = "#EACD61",
  sun = "#f6d96d",
  purple = "#bd93ff",
  dark_purple = "#B78AFF",
  teal = "#12c7c4",
  orange = "#FF955C",
  cyan = "#22ECDB",
  statusline_bg = "#232b3a",
  lightbg = "#303847",
  pmenu_bg = "#3CEC85",
  folder_bg = "#69C3FF",
}

-- Base 16 color palette (syntax colors)
local base_16 = {
  base00 = "#1c2433",
  base01 = "#262e3d",
  base02 = "#303847",
  base03 = "#444c5b",
  base04 = "#a1adb7",
  base05 = "#c3cfd9",
  base06 = "#ABB7C1",
  base07 = "#08bdba",
  base08 = "#FF738A",
  base09 = "#FF955C",
  base0A = "#EACD61",
  base0B = "#3CEC85",
  base0C = "#77aed7",
  base0D = "#69C3FF",
  base0E = "#22ECDB",
  base0F = "#B78AFF",
}

-- Helper function to set highlights
local function hi(group, opts)
  local cmd = "hi " .. group
  if opts.fg then cmd = cmd .. " guifg=" .. opts.fg end
  if opts.bg then cmd = cmd .. " guibg=" .. opts.bg end
  if opts.sp then cmd = cmd .. " guisp=" .. opts.sp end
  if opts.style then cmd = cmd .. " gui=" .. opts.style end
  vim.cmd(cmd)
end

-- === UI ELEMENTS (from defaults.lua) ===

-- Line Numbers & Sidebar (CRITICAL FIX)
hi("LineNr", { fg = base_30.grey })
hi("CursorLineNr", { fg = base_30.white })
hi("SignColumn", { fg = base_16.base03 })
hi("FoldColumn", { fg = base_30.grey, bg = base_16.base00 })
hi("Folded", { fg = base_30.light_grey, bg = base_16.base01 })

-- Main Editor
hi("Normal", { fg = base_16.base05, bg = base_16.base00 })
hi("NormalFloat", { bg = base_30.darker_black })
hi("FloatBorder", { fg = base_30.blue })
hi("FloatTitle", { fg = base_30.white, bg = base_30.grey })

-- Cursor and Lines
hi("Cursor", { fg = base_16.base00, bg = base_16.base05 })
hi("CursorLine", { bg = base_30.black2 })
hi("CursorColumn", { bg = base_16.base01 })
hi("ColorColumn", { bg = base_16.base01 })

-- Visual Selection
hi("Visual", { bg = base_30.one_bg2 })
hi("VisualNOS", { bg = base_30.one_bg2 })

-- Search
hi("Search", { fg = base_16.base00, bg = base_16.base0A })
hi("IncSearch", { fg = base_16.base01, bg = base_16.base09 })
hi("Substitute", { fg = base_16.base01, bg = base_16.base0A })

-- Window Separators
hi("WinSeparator", { fg = base_30.line })
hi("WinBar", { bg = base_30.statusline_bg })
hi("WinBarNC", { bg = base_30.statusline_bg })

-- Completion Menu
hi("Pmenu", { bg = base_30.one_bg })
hi("PmenuSbar", { bg = base_30.one_bg })
hi("PmenuSel", { bg = base_30.pmenu_bg, fg = base_30.black })
hi("PmenuThumb", { bg = base_30.grey })

-- Statusline & Tabline
hi("StatusLine", { bg = base_30.statusline_bg })
hi("StatusLineNC", { bg = base_30.statusline_bg })
hi("TabLine", { fg = base_30.light_grey, bg = base_30.black2 })
hi("TabLineSel", { fg = base_30.white, bg = base_30.black })
hi("TabLineFill", { bg = base_30.black2 })

-- Messages & Prompts
hi("ErrorMsg", { fg = base_16.base08, bg = base_16.base00 })
hi("WarningMsg", { fg = base_16.base0A })
hi("MoreMsg", { fg = base_16.base0B })
hi("ModeMsg", { fg = base_16.base0B })
hi("Question", { fg = base_16.base0D })

-- Special Elements
hi("MatchParen", { bg = base_30.grey, fg = base_30.white })
hi("NonText", { fg = base_16.base03 })
hi("SpecialKey", { fg = base_16.base03 })
hi("Conceal", { fg = base_16.base0D, bg = base_16.base00 })
hi("Directory", { fg = base_16.base0D })
hi("Title", { fg = base_16.base0D })

-- === SYNTAX HIGHLIGHTING (from syntax.lua) ===

hi("Comment", { fg = base_30.grey_fg, style = "italic" })

-- Constants
hi("Constant", { fg = base_16.base09 })
hi("String", { fg = base_16.base0B })
hi("Character", { fg = base_16.base08 })
hi("Number", { fg = base_16.base09 })
hi("Boolean", { fg = base_16.base09 })
hi("Float", { fg = base_16.base09 })

-- Identifiers
hi("Identifier", { fg = base_16.base08 })
hi("Function", { fg = base_16.base0D })

-- Statements
hi("Statement", { fg = base_16.base0E })
hi("Conditional", { fg = base_16.base0E })
hi("Repeat", { fg = base_16.base0E })
hi("Label", { fg = base_16.base0A })
hi("Operator", { fg = base_16.base05 })
hi("Keyword", { fg = base_16.base0E })
hi("Exception", { fg = base_16.base08 })

-- PreProcessor
hi("PreProc", { fg = base_16.base0A })
hi("Include", { fg = base_16.base0D })
hi("Define", { fg = base_16.base0E })
hi("Macro", { fg = base_16.base08 })
hi("PreCondit", { fg = base_16.base0A })

-- Types
hi("Type", { fg = base_16.base0A })
hi("StorageClass", { fg = base_16.base0A })
hi("Structure", { fg = base_16.base0E })
hi("Typedef", { fg = base_16.base0A })

-- Special
hi("Special", { fg = base_16.base0C })
hi("SpecialChar", { fg = base_16.base0F })
hi("Tag", { fg = base_16.base0A })
hi("Delimiter", { fg = base_16.base0F })
hi("SpecialComment", { fg = base_16.base0C })
hi("Debug", { fg = base_16.base08 })

-- Errors
hi("Error", { fg = base_16.base00, bg = base_16.base08 })
hi("Todo", { fg = base_16.base0A, bg = base_16.base01 })

hi("Underlined", { fg = base_16.base0B, style = "underline" })
hi("Ignore", { fg = base_16.base0C })

-- === DIFF ===

hi("DiffAdd", { fg = base_16.base0B, bg = base_16.base00 })
hi("DiffChange", { fg = base_16.base0E, bg = base_16.base00 })
hi("DiffDelete", { fg = base_16.base08, bg = base_16.base00 })
hi("DiffText", { fg = base_16.base0D, bg = base_16.base01 })

hi("Added", { fg = base_30.green })
hi("Changed", { fg = base_30.yellow })
hi("Removed", { fg = base_30.red })

-- === GIT SIGNS ===

hi("GitSignsAdd", { fg = base_30.green })
hi("GitSignsChange", { fg = base_30.yellow })
hi("GitSignsDelete", { fg = base_30.red })

-- === LSP DIAGNOSTICS (from lsp.lua) ===

hi("DiagnosticError", { fg = base_30.red })
hi("DiagnosticWarn", { fg = base_30.yellow })
hi("DiagnosticInfo", { fg = base_30.green })
hi("DiagnosticHint", { fg = base_30.purple })

hi("DiagnosticUnderlineError", { sp = base_30.red, style = "underline" })
hi("DiagnosticUnderlineWarn", { sp = base_30.yellow, style = "underline" })
hi("DiagnosticUnderlineInfo", { sp = base_30.green, style = "underline" })
hi("DiagnosticUnderlineHint", { sp = base_30.purple, style = "underline" })

hi("LspReferenceText", { bg = base_30.one_bg3 })
hi("LspReferenceRead", { bg = base_30.one_bg3 })
hi("LspReferenceWrite", { bg = base_30.one_bg3 })

hi("LspInlayHint", { fg = base_30.light_grey, bg = base_30.black2 })
hi("LspSignatureActiveParameter", { fg = base_30.black, bg = base_30.green })

-- === TELESCOPE (from telescope.lua) ===

hi("TelescopeBorder", { fg = base_30.grey, bg = base_30.darker_black })
hi("TelescopePromptBorder", { fg = base_30.grey, bg = base_30.darker_black })
hi("TelescopePromptNormal", { fg = base_16.base05, bg = base_30.darker_black })
hi("TelescopeResultsBorder", { fg = base_30.grey, bg = base_30.darker_black })
hi("TelescopeResultsNormal", { bg = base_30.darker_black })
hi("TelescopePreviewBorder", { fg = base_30.grey, bg = base_30.darker_black })
hi("TelescopePreviewNormal", { bg = base_30.darker_black })
hi("TelescopeSelection", { bg = base_30.one_bg2, fg = base_30.white })
hi("TelescopeSelectionCaret", { fg = base_30.cyan, bg = base_30.one_bg2 })
hi("TelescopeMatching", { fg = base_30.blue, style = "bold" })

-- === TREESITTER (from treesitter.lua) ===

hi("@variable", { fg = base_16.base05 })
hi("@variable.builtin", { fg = base_16.base09 })
hi("@variable.parameter", { fg = base_16.base08 })
hi("@variable.member", { fg = base_16.base08 })

hi("@constant", { fg = base_16.base08 })
hi("@constant.builtin", { fg = base_16.base09 })
hi("@constant.macro", { fg = base_16.base08 })

hi("@string", { fg = base_16.base0B })
hi("@string.regex", { fg = base_16.base0C })
hi("@string.escape", { fg = base_16.base0C })
hi("@character", { fg = base_16.base08 })
hi("@number", { fg = base_16.base09 })
hi("@boolean", { fg = base_16.base09 })
hi("@float", { fg = base_16.base09 })

hi("@function", { fg = base_16.base0D })
hi("@function.builtin", { fg = base_16.base0D })
hi("@function.macro", { fg = base_16.base08 })
hi("@function.method", { fg = base_16.base0D })

hi("@constructor", { fg = base_16.base0C })
hi("@parameter", { fg = base_16.base08 })

hi("@keyword", { fg = base_16.base0E })
hi("@keyword.function", { fg = base_16.base0E })
hi("@keyword.return", { fg = base_16.base0E })
hi("@keyword.operator", { fg = base_16.base0E })

hi("@conditional", { fg = base_16.base0E })
hi("@repeat", { fg = base_16.base0E })
hi("@label", { fg = base_16.base0A })
hi("@operator", { fg = base_16.base05 })
hi("@exception", { fg = base_16.base08 })

hi("@type", { fg = base_16.base0A })
hi("@type.builtin", { fg = base_16.base0A })
hi("@type.qualifier", { fg = base_16.base0E })

hi("@structure", { fg = base_16.base0E })
hi("@include", { fg = base_16.base0D })

hi("@property", { fg = base_16.base08 })
hi("@field", { fg = base_16.base08 })

hi("@punctuation.delimiter", { fg = base_16.base0F })
hi("@punctuation.bracket", { fg = base_16.base05 })
hi("@punctuation.special", { fg = base_16.base08 })

hi("@comment", { fg = base_30.grey_fg, style = "italic" })
hi("@comment.todo", { fg = base_30.grey, bg = base_30.white })
hi("@comment.note", { fg = base_30.white, bg = base_30.blue })
hi("@comment.warning", { fg = base_30.black, bg = base_30.yellow })
hi("@comment.error", { fg = base_30.white, bg = base_30.red })

hi("@tag", { fg = base_16.base08 })
hi("@tag.attribute", { fg = base_16.base0A })
hi("@tag.delimiter", { fg = base_16.base0F })

hi("@markup.strong", { style = "bold" })
hi("@markup.italic", { style = "italic" })
hi("@markup.underline", { style = "underline" })
hi("@markup.strike", { style = "strikethrough" })
hi("@markup.heading", { fg = base_16.base0D, style = "bold" })
hi("@markup.link", { fg = base_16.base08, style = "underline" })
hi("@markup.link.url", { fg = base_16.base0B, style = "underline" })
hi("@markup.list", { fg = base_16.base08 })

-- === NVIM-TREE ===

hi("NvimTreeNormal", { bg = base_30.darker_black })
hi("NvimTreeNormalNC", { bg = base_30.darker_black })
hi("NvimTreeRootFolder", { fg = base_30.red, style = "bold" })
hi("NvimTreeGitDirty", { fg = base_30.yellow })
hi("NvimTreeGitNew", { fg = base_30.green })
hi("NvimTreeGitDeleted", { fg = base_30.red })
hi("NvimTreeSpecialFile", { fg = base_30.yellow, style = "underline" })
hi("NvimTreeIndentMarker", { fg = base_30.grey })
hi("NvimTreeImageFile", { fg = base_30.dark_purple })
hi("NvimTreeSymlink", { fg = base_30.cyan })
hi("NvimTreeFolderName", { fg = base_30.blue })
hi("NvimTreeFolderIcon", { fg = base_30.folder_bg })
hi("NvimTreeOpenedFolderName", { fg = base_30.blue })

-- === WHICH-KEY ===

hi("WhichKey", { fg = base_30.blue })
hi("WhichKeyGroup", { fg = base_30.green })
hi("WhichKeyDesc", { fg = base_16.base05 })
hi("WhichKeySeparator", { fg = base_30.grey })
hi("WhichKeyFloat", { bg = base_30.darker_black })
hi("WhichKeyBorder", { fg = base_30.blue, bg = base_30.darker_black })

-- === HEALTH CHECK ===

hi("healthSuccess", { fg = base_30.green, bg = base_30.black })
