local M = {}

function M.generate_syntax_highlights(colors)
  return {
    Comment = { fg = colors.base_500, italic = true },
    Constant = { fg = colors.accent_100 },
    Number = { fg = colors.accent_100 },
    String = { fg = colors.accent_100 },
    Character = { fg = colors.base_300 },
    Boolean = { fg = colors.base_300 },
    Float = { fg = colors.base_300 },
    Identifier = { fg = colors.base_300 },
    Function = { fg = colors.base_200 },
    Statement = { fg = colors.accent_100 },
    Conditional = { fg = colors.accent_100 },
    Repeat = { fg = colors.accent_100 },
    Label = { fg = colors.accent_300 },
    Operator = { fg = colors.base_300 },
    Keyword = { fg = colors.accent_100 },
    Exception = { fg = colors.accent_100 },
    PreProc = { fg = colors.accent_100 },
    Include = { fg = colors.accent_100 },
    Define = { fg = colors.accent_100 },
    Macro = { fg = colors.accent_100 },
    PreCondit = { fg = colors.accent_100 },
    Type = { fg = colors.accent_100 },
    StorageClass = { fg = colors.accent_100 },
    Structure = { fg = colors.accent_100 },
    Typedef = { fg = colors.accent_100 },
    Special = { fg = colors.base_300 },
    SpecialChar = { fg = colors.base_300 },
    Tag = { fg = colors.accent_100 },
    Delimiter = { fg = colors.base_300 },
    SpecialComment = { fg = colors.base_300, italic = true },
    Debug = { fg = colors.accent_100 },
    Underlined = { underline = true },
    Error = { fg = colors.red },
    Todo = { fg = colors.accent_100, italic = true, bold = true },

    ["@text"] = { fg = colors.base_200 },
    ["@text.strong"] = { bold = true },
    ["@text.emphasis"] = { italic = true },
    ["@text.underline"] = { underline = true },
    ["@text.strike"] = { strikethrough = true },
    ["@text.title"] = { fg = colors.accent_100, bold = true },
    ["@text.literal"] = { fg = colors.base_300 },
    ["@text.uri"] = { fg = colors.accent_100, underline = true },
    ["@text.reference"] = { fg = colors.accent_100 },

    ["@variable"] = { clear = true },
    ["@comment"] = { link = "Comment" },
    ["@spell"] = { clear = true },

    ["@keyword"] = { fg = colors.accent_200 },
    ["@keyword.function"] = { fg = colors.accent_200 },
    ["@keyword.operator"] = { fg = colors.accent_200 },
    ["@keyword.return"] = { fg = colors.accent_200 },

    ["@function"] = { fg = colors.base_200 },
    ["@function.builtin"] = { fg = colors.base_200 },
    ["@function.macro"] = { fg = colors.accent_100 },
    ["@method"] = { fg = colors.accent_100 },

    ["@variable.builtin"] = { fg = colors.base_400 },
    ["@lsp.type.variable"] = { fg = colors.base_400 },

    ["@parameter"] = { fg = colors.base_400, italic = true },
    ["@property"] = { fg = colors.accent_100 },
    ["@field"] = { fg = colors.accent_100 },

    ["@type"] = { fg = colors.accent_100 },
    ["@type.builtin"] = { fg = colors.accent_100 },
    ["@type.qualifier"] = { fg = colors.accent_100 },
    ["@type.definition"] = { fg = colors.accent_100 },

    ["@include"] = { fg = colors.accent_100 },
    ["@namespace"] = { fg = colors.accent_100 },

    ["@punctuation"] = { fg = colors.base_500 },
    ["@punctuation.delimiter"] = { fg = colors.base_500 },
    ["@punctuation.bracket"] = { fg = colors.base_500 },
    ["@punctuation.special"] = { fg = colors.base_500 },
    ["@constructor"] = { fg = colors.base_500 },

    ["@string"] = { fg = colors.accent_200 },
    ["@string.regexp"] = { fg = colors.accent_200 },
    ["@string.escape"] = { fg = colors.accent_200 },
    ["@string.special"] = { fg = colors.accent_100 },

    ["@constant"] = { fg = colors.accent_100 },
    ["@constant.builtin"] = { fg = colors.accent_100 },
    ["@constant.macro"] = { fg = colors.accent_100 },

    ["@number"] = { fg = colors.accent_300 },
    ["@boolean"] = { fg = colors.base_300 },
    ["@float"] = { fg = colors.base_300 },

    ["@tag"] = { fg = colors.accent_100 },
    ["@tag.attribute"] = { fg = colors.accent_100 },
    ["@tag.delimiter"] = { fg = colors.base_300 },

    ["@error"] = { fg = colors.red },
    ["@warning"] = { fg = colors.yellow },
    ["@info"] = { fg = colors.accent_100 },
    ["@hint"] = { fg = colors.green },

    ["@lsp.type.comment"] = { link = "@comment" },
    ["@lsp.type.enum"] = { link = "@type" },
    ["@lsp.type.enumMember"] = { link = "@constant" },
    ["@lsp.type.function"] = { link = "@function" },
    ["@lsp.type.interface"] = { link = "@type" },
    ["@lsp.type.keyword"] = { link = "@keyword" },
    ["@lsp.type.namespace"] = { link = "@namespace" },
    ["@lsp.type.parameter"] = { link = "@parameter" },
    ["@lsp.type.property"] = { link = "@property" },

    ["@base.100"] = { fg = colors.base_100, sp = colors.base_100 },
    ["@base.200"] = { fg = colors.base_200, sp = colors.base_200 },
    ["@base.300"] = { fg = colors.base_300, sp = colors.base_300 },
    ["@base.400"] = { fg = colors.base_400, sp = colors.base_400 },
    ["@base.500"] = { fg = colors.base_500, sp = colors.base_500 },
    ["@base.600"] = { fg = colors.base_600, sp = colors.base_600 },
    ["@base.700"] = { fg = colors.base_700, sp = colors.base_700 },
    ["@base.800"] = { fg = colors.base_800, sp = colors.base_800 },
    ["@base.900"] = { fg = colors.base_900, sp = colors.base_900 },
    ["@base.950"] = { fg = colors.base_950, sp = colors.base_950 },

    ["@accent.100"] = { fg = colors.accent_100, sp = colors.accent_100 },
    ["@accent.200"] = { fg = colors.accent_200, sp = colors.accent_200 },
    ["@accent.300"] = { fg = colors.accent_300, sp = colors.accent_300 },
    ["@accent.400"] = { fg = colors.accent_400, sp = colors.accent_400 },
    ["@accent.500"] = { fg = colors.accent_500, sp = colors.accent_500 },
    ["@accent.600"] = { fg = colors.accent_600, sp = colors.accent_600 },
    ["@accent.700"] = { fg = colors.accent_700, sp = colors.accent_700 },
    ["@accent.800"] = { fg = colors.accent_800, sp = colors.accent_800 },
    ["@accent.900"] = { fg = colors.accent_900, sp = colors.accent_900 },
    ["@accent.950"] = { fg = colors.accent_950, sp = colors.accent_950 },
  }
end

return M
